Namespaces
Variants

std::map<Key,T,Compare,Allocator>:: begin, std::map<Key,T,Compare,Allocator>:: cbegin

From cppreference.net

iterator begin ( ) ;
(1) (noexcept desde C++11)
(constexpr desde C++26)
const_iterator begin ( ) const ;
(2) (noexcept desde C++11)
(constexpr desde C++26)
const_iterator cbegin ( ) const noexcept ;
(3) (desde C++11)
(constexpr desde C++26)

Devuelve un iterador al primer elemento de * this .

Si * this está vacío, el iterador devuelto será igual a end() .

range-begin-end.svg

Contenidos

Valor de retorno

Iterador al primer elemento.

Complejidad

Constante.

Notas

libc++ retrocede cbegin() al modo C++98.

Ejemplo

#include <iostream>
#include <map>
int main()
{
    std::map<int, float> num_map;
    num_map[4] = 4.13;
    num_map[9] = 9.24;
    num_map[1] = 1.09;
    // Llama a num_map.begin() y num_map.end()
    for (auto it = num_map.begin(); it != num_map.end(); ++it)
        std::cout << it->first << ", " << it->second << '\n';
}

Salida:

1, 1.09
4, 4.13
9, 9.24

Ejemplo usando una función de comparación personalizada

#include <cmath>
#include <iostream>
#include <map>
struct Point { double x, y; };
// Comparar las coordenadas x de dos punteros a Point.
struct PointCmp
{
    bool operator()(const Point* lhs, const Point* rhs) const
    {
        return lhs->x < rhs->x; 
    }
};
int main()
{
    // Nótese que aunque las coordenadas x están desordenadas, el
    // mapa será iterado en orden creciente de coordenadas x.
    Point points[3] = {{2, 0}, {1, 0}, {3, 0}};
    // mag es un mapa que envía la dirección del nodo a su magnitud en el plano x-y.
    // Aunque las claves son punteros-a-Point, queremos ordenar el mapa por las
    // coordenadas x de los puntos y NO por las direcciones de los Points. Esto
    // se hace usando el método de comparación de la clase PointCmp.
    std::map<Point*, double, PointCmp> mag(
        {{points, 2}, {points + 1, 1}, {points + 2, 3}}
    );
    // Cambiar cada coordenada y de 0 a la magnitud.
    for (auto iter = mag.begin(); iter != mag.end(); ++iter)
    {
        auto cur = iter->first; // Puntero a Node
        cur->y = mag[cur]; // También se podría haber usado cur->y = iter->second;
    }
    // Actualizar e imprimir la magnitud de cada nodo.
    for (auto iter = mag.begin(); iter != mag.end(); ++iter)
    {
        auto cur = iter->first;
        mag[cur] = std::hypot(cur->x, cur->y);
        std::cout << "The magnitude of (" << cur->x << ", " << cur->y << ") is ";
        std::cout << iter->second << '\n';
    }
    // Repetir lo anterior con el bucle for basado en rangos.
    for (auto i : mag)
    {
        auto cur = i.first;
        cur->y = i.second;
        mag[cur] = std::hypot(cur->x, cur->y);
        std::cout << "The magnitude of (" << cur->x << ", " << cur->y << ") is ";
        std::cout << mag[cur] << '\n';
        // Nótese que en contraste con std::cout << iter->second << '\n'; anterior, 
        // std::cout << i.second << '\n'; NO imprimirá la magnitud actualizada.
        // Si se usara auto &i : mag en su lugar, imprimirá la magnitud actualizada.
    }
}

Salida:

The magnitude of (1, 1) is 1.41421
The magnitude of (2, 2) is 2.82843
The magnitude of (3, 3) is 4.24264
The magnitude of (1, 1.41421) is 1.73205
The magnitude of (2, 2.82843) is 3.4641
The magnitude of (3, 4.24264) is 5.19615

Véase también

(C++11)
devuelve un iterador al final
(función miembro pública)
(C++11) (C++14)
devuelve un iterador al inicio de un contenedor o array
(plantilla de función)