Namespaces
Variants

std:: map

From cppreference.net
Definiert in Header <map>
template <

class Key,
class T,
class Compare = std:: less < Key > ,
class Allocator = std:: allocator < std:: pair < const Key, T >>

> class map ;
(1)
namespace pmr {

template <
class Key,
class T,
class Compare = std:: less < Key >
> using map = std :: map < Key, T, Compare,
std:: pmr :: polymorphic_allocator < std:: pair < const Key, T >>> ;

}
(2) (seit C++17)

std::map ist ein sortierter assoziativer Container, der Schlüssel-Wert-Paare mit eindeutigen Schlüsseln enthält. Schlüssel werden mithilfe der Vergleichsfunktion Compare sortiert. Such-, Entfernungs- und Einfügeoperationen haben logarithmische Komplexität. Maps werden üblicherweise als Red–black trees implementiert.

Iteratoren von std::map durchlaufen in aufsteigender Reihenfolge der Schlüssel, wobei aufsteigend durch den Vergleich definiert ist, der für die Konstruktion verwendet wurde. Das heißt, gegeben

  • m , eine std::map
  • it_l und it_r , dereferenzierbare Iteratoren für m , mit it_l < it_r .

m. value_comp ( ) ( * it_l, * it_r ) == true (aufsteigend sortiert bei Verwendung des Standardvergleichs).

Überall dort, wo die Standardbibliothek die Compare -Anforderungen verwendet, wird Eindeutigkeit durch die Äquivalenzrelation bestimmt. In ungenauen Begriffen gelten zwei Objekte a und b als äquivalent (nicht eindeutig), wenn keines kleiner als das andere verglichen wird: ! comp ( a, b ) && ! comp ( b, a ) .

std::map erfüllt die Anforderungen von Container , AllocatorAwareContainer , AssociativeContainer und ReversibleContainer .

Alle Memberfunktionen von std::map sind constexpr : Es ist möglich, std::map -Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::map -Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.

(seit C++26)

Inhaltsverzeichnis

Template-Parameter

Mitgliedertypen

Typ Definition
key_type Key
mapped_type T
value_type std:: pair < const Key, T >
size_type Vorzeichenloser Ganzzahltyp (üblicherweise std::size_t )
difference_type Vorzeichenbehafteter Ganzzahltyp (üblicherweise std::ptrdiff_t )
key_compare Compare
allocator_type Allocator
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(bis C++11)

std:: allocator_traits < Allocator > :: pointer

(seit C++11)
const_pointer

Allocator::const_pointer

(bis C++11)

std:: allocator_traits < Allocator > :: const_pointer

(seit C++11)
iterator LegacyBidirectionalIterator und ConstexprIterator (seit C++26) zu value_type
const_iterator LegacyBidirectionalIterator und ConstexprIterator (seit C++26) zu const value_type
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >
node_type (seit C++17) eine Spezialisierung von node handle , die einen Container-Knoten darstellt
insert_return_type (seit C++17) Typ, der das Ergebnis des Einfügens eines node_type beschreibt, eine Spezialisierung von

template < class Iter, class NodeType >
struct /*unspezifiziert*/
{
Iter     position ;
bool inserted ;
NodeType node ;
} ;

instanziiert mit den Template-Argumenten iterator und node_type .

Mitgliedsklassen

vergleicht Objekte vom Typ value_type
(Klasse)

Memberfunktionen

konstruiert die map
(öffentliche Elementfunktion)
zerstört die map
(öffentliche Elementfunktion)
weist dem Container Werte zu
(öffentliche Elementfunktion)
gibt den zugeordneten Allokator zurück
(öffentliche Elementfunktion)
Elementzugriff
Zugriff auf spezifisches Element mit Grenzprüfung
(öffentliche Member-Funktion)
greift auf ein bestimmtes Element zu oder fügt es ein
(öffentliche Elementfunktion)
Iteratoren
gibt einen Iterator zum Anfang zurück
(öffentliche Member-Funktion)
(C++11)
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion)
gibt einen umgekehrten Iterator zum Anfang zurück
(öffentliche Member-Funktion)
(C++11)
gibt einen umgekehrten Iterator zum Ende zurück
(öffentliche Elementfunktion)
Kapazität
prüft, ob der Container leer ist
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion)
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion)
Modifikatoren
löscht den Inhalt
(öffentliche Elementfunktion)
fügt Elemente ein oder Knoten (seit C++17)
(öffentliche Elementfunktion)
fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion)
Fügt ein Element ein oder weist es dem aktuellen Element zu, falls der Schlüssel bereits existiert
(öffentliche Elementfunktion)
(C++11)
Konstruiert Element direkt vor Ort
(öffentliche Elementfunktion)
Konstruiert Elemente direkt unter Verwendung eines Hinweises
(öffentliche Member-Funktion)
Fügt direkt ein, falls der Schlüssel nicht existiert, tut nichts, falls der Schlüssel existiert
(öffentliche Elementfunktion)
löscht Elemente
(öffentliche Elementfunktion)
tauscht die Inhalte aus
(öffentliche Elementfunktion)
(C++17)
extrahiert Knoten aus dem Container
(öffentliche Elementfunktion)
(C++17)
fügt Knoten aus einem anderen Container ein
(öffentliche Elementfunktion)
Lookup
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion)
findet Element mit spezifischem Schlüssel
(öffentliche Elementfunktion)
(C++20)
prüft, ob der Container ein Element mit spezifischem Schlüssel enthält
(öffentliche Elementfunktion)
gibt den Bereich der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion)
gibt einen Iterator zum ersten Element zurück, das nicht kleiner als der gegebene Schlüssel ist
(öffentliche Elementfunktion)
gibt einen Iterator zum ersten Element zurück, größer als der angegebene Schlüssel
(öffentliche Elementfunktion)
Beobachter
gibt die Funktion zurück, die Schlüssel vergleicht
(öffentliche Elementfunktion)
gibt die Funktion zurück, die Schlüssel in Objekten des Typs value_type vergleicht
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

(entfernt in C++20) (entfernt in C++20) (entfernt in C++20) (entfernt in C++20) (entfernt in C++20) (C++20)
vergleicht die Werte von zwei map s lexikographisch
(Funktions-Template)
spezialisiert den std::swap Algorithmus
(Funktions-Template)
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktions-Template)

Deduktionsleitfäden

(seit C++17)

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_containers_ranges 202202L (C++23) Ranges-Konstruktion und -Einfügung für Container
__cpp_lib_constexpr_map 202502L (C++26) constexpr std::map

Beispiel

#include <iostream>
#include <map>
#include <string>
#include <string_view>
void print_map(std::string_view comment, const std::map<std::string, int>& m)
{
    std::cout << comment;
    // Iterate using C++17 facilities
    for (const auto& [key, value] : m)
        std::cout << '[' << key << "] = " << value << "; ";
// C++11 alternative:
//  for (const auto& n : m)
//      std::cout << n.first << " = " << n.second << "; ";
//
// C++98 alternative:
//  for (std::map<std::string, int>::const_iterator it = m.begin(); it != m.end(); ++it)
//      std::cout << it->first << " = " << it->second << "; ";
    std::cout << '\n';
}
int main()
{
    // Create a map of three (string, int) pairs
    std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
    print_map("1) Initial map: ", m);
    m["CPU"] = 25; // update an existing value
    m["SSD"] = 30; // insert a new value
    print_map("2) Updated map: ", m);
    // Using operator[] with non-existent key always performs an insert
    std::cout << "3) m[UPS] = " << m["UPS"] << '\n';
    print_map("4) Updated map: ", m);
    m.erase("GPU");
    print_map("5) After erase: ", m);
    std::erase_if(m, [](const auto& pair){ return pair.second > 25; });
    print_map("6) After erase: ", m);
    std::cout << "7) m.size() = " << m.size() << '\n';
    m.clear();
    std::cout << std::boolalpha << "8) Map is empty: " << m.empty() << '\n';
}

Ausgabe:

1) Initial map: [CPU] = 10; [GPU] = 15; [RAM] = 20;
2) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30;
3) m[UPS] = 0
4) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; [UPS] = 0;
5) After erase: [CPU] = 25; [RAM] = 20; [SSD] = 30; [UPS] = 0;
6) After erase: [CPU] = 25; [RAM] = 20; [UPS] = 0;
7) m.size() = 3
8) Map is empty: true

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 230 C++98 Key musste nicht CopyConstructible sein
(ein Schlüssel vom Typ Key konnte möglicherweise nicht konstruiert werden)
Key muss ebenfalls
CopyConstructible sein
LWG 464 C++98 Zugriff auf eine konstante map über Schlüssel war umständlich at Funktion bereitgestellt

Siehe auch

Sammlung von Schlüssel-Wert-Paaren, nach Schlüsseln sortiert
(Klassen-Template)
Sammlung von Schlüssel-Wert-Paaren, nach Schlüsseln gehasht, Schlüssel sind eindeutig
(Klassen-Template)
(C++23)
passt zwei Container an, um eine Sammlung von Schlüssel-Wert-Paaren mit eindeutigen, sortierten Schlüsseln bereitzustellen
(Klassen-Template)