Namespaces
Variants

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

From cppreference.net

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

Retourne un itérateur vers le premier élément de * this .

Si * this est vide, l'itérateur retourné sera égal à end() .

range-begin-end.svg

Table des matières

Valeur de retour

Itérateur vers le premier élément.

Complexité

Constante.

Notes

libc++ rétroporte cbegin() au mode C++98.

Exemple

#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;
    // Appelle num_map.begin() et num_map.end()
    for (auto it = num_map.begin(); it != num_map.end(); ++it)
        std::cout << it->first << ", " << it->second << '\n';
}

Sortie :

1, 1.09
4, 4.13
9, 9.24

Exemple utilisant une fonction de comparaison personnalisée

#include <cmath>
#include <iostream>
#include <map>
struct Point { double x, y; };
// Compare les coordonnées x de deux pointeurs de Point.
struct PointCmp
{
    bool operator()(const Point* lhs, const Point* rhs) const
    {
        return lhs->x < rhs->x; 
    }
};
int main()
{
    // Notez que bien que les coordonnées x soient désordonnées,
    // la map sera parcourue par coordonnées x croissantes.
    Point points[3] = {{2, 0}, {1, 0}, {3, 0}};
    // mag est une map associant l'adresse d'un nœud à sa magnitude dans le plan x-y.
    // Bien que les clés soient des pointeurs-vers-Point, nous voulons ordonner la map par
    // les coordonnées x des points et NON par les adresses des Points. Ceci
    // est réalisé en utilisant la méthode de comparaison de la classe PointCmp.
    std::map<Point*, double, PointCmp> mag(
        {{points, 2}, {points + 1, 1}, {points + 2, 3}}
    );
    // Change chaque coordonnée y de 0 à la magnitude.
    for (auto iter = mag.begin(); iter != mag.end(); ++iter)
    {
        auto cur = iter->first; // Pointeur vers Node
        cur->y = mag[cur]; // On aurait aussi pu utiliser cur->y = iter->second;
    }
    // Met à jour et affiche la magnitude de chaque nœud.
    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';
    }
    // Répète ce qui précède avec la boucle for basée sur les intervalles.
    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';
        // Notez qu'au contraire de std::cout << iter->second << '\n'; ci-dessus,
        // std::cout << i.second << '\n'; n'affichera PAS la magnitude mise à jour.
        // Si auto &i : mag était utilisé à la place, cela afficherait la magnitude mise à jour.
    }
}

Sortie :

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

Voir aussi

(C++11)
renvoie un itérateur vers la fin
(fonction membre publique)
(C++11) (C++14)
renvoie un itérateur vers le début d'un conteneur ou d'un tableau
(fonction template)