Namespaces
Variants

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

From cppreference.net

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

Gibt einen Iterator zum ersten Element von * this zurück.

Wenn * this leer ist, wird der zurückgegebene Iterator gleich end() sein.

range-begin-end.svg

Inhaltsverzeichnis

Rückgabewert

Iterator zum ersten Element.

Komplexität

Konstante.

Hinweise

libc++ portiert cbegin() in den C++98-Modus zurück.

Beispiel

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

Ausgabe:

1, 1.09
4, 4.13
9, 9.24

Beispiel mit einer benutzerdefinierten Vergleichsfunktion

#include <cmath>
#include <iostream>
#include <map>
struct Point { double x, y; };
// Vergleiche die x-Koordinaten zweier Point-Zeiger.
struct PointCmp
{
    bool operator()(const Point* lhs, const Point* rhs) const
    {
        return lhs->x < rhs->x; 
    }
};
int main()
{
    // Beachte: Obwohl die x-Koordinaten nicht in Reihenfolge sind, wird
    // die Map nach aufsteigenden x-Koordinaten durchlaufen.
    Point points[3] = {{2, 0}, {1, 0}, {3, 0}};
    // mag ist eine Map, die die Adresse eines Knotens auf seine Magnitude in der x-y-Ebene abbildet.
    // Obwohl die Schlüssel Point-Zeiger sind, wollen wir die Map nach den
    // x-Koordinaten der Punkte und NICHT nach den Adressen der Points ordnen.
    // Dies wird durch die Vergleichsmethode der PointCmp-Klasse erreicht.
    std::map<Point*, double, PointCmp> mag(
        {{points, 2}, {points + 1, 1}, {points + 2, 3}}
    );
    // Ändere jede y-Koordinate von 0 auf die Magnitude.
    for (auto iter = mag.begin(); iter != mag.end(); ++iter)
    {
        auto cur = iter->first; // Zeiger auf Node
        cur->y = mag[cur]; // Hätte auch cur->y = iter->second; verwenden können
    }
    // Aktualisiere und gebe die Magnitude jedes Knotens aus.
    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';
    }
    // Wiederhole das obige mit der bereichsbasierten for-Schleife.
    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';
        // Beachte: Im Gegensatz zu std::cout << iter->second << '\n'; oben,
        // wird std::cout << i.second << '\n'; NICHT die aktualisierte Magnitude ausgeben.
        // Wenn stattdessen auto &i : mag verwendet wird, wird die aktualisierte Magnitude ausgegeben.
    }
}

Ausgabe:

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

Siehe auch

(C++11)
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion)
(C++11) (C++14)
gibt einen Iterator zum Anfang eines Containers oder Arrays zurück
(Funktionstemplate)