std::map
| Definiert in Header <map> |
||
| template< class Key, |
(1) | |
| namespace pmr { template< |
(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 Rot-Schwarz-Bäume implementiert.
Iteratoren von std::map iterieren in aufsteigender Reihenfolge der Schlüssel, wobei aufsteigend durch den für die Konstruktion verwendeten Vergleich definiert ist. Das heißt, gegeben
- m, eine
std::map - it_l und it_r, dereferenzierbare Iteratoren zu m, mit it_l < it_r.
m.value_comp()(*it_l, *it_r) == true (von klein nach groß, wenn der Standardvergleich verwendet wird).
Überall dort, wo die Standardbibliothek die Compare-Anforderungen verwendet, wird die Eindeutigkeit durch die Äquivalenzrelation bestimmt. Ungenau formuliert: Zwei Objekte a und b gelten als äquivalent (nicht eindeutig), wenn keines kleiner als das andere ist: !comp(a, b) && !comp(b, a).
std::map erfüllt die Anforderungen von Container, AllocatorAwareContainer, AssociativeContainer und ReversibleContainer.
|
Alle Member-Funktionen von |
(seit C++26) |
Inhalt |
[edit] Template-Parameter
| Dieser Abschnitt ist unvollständig Grund: Beschreibungen der Template-Parameter hinzufügen. |
[edit] Member-Typen
| Typ | Definition | ||||
key_type
|
Key | ||||
mapped_type
|
T | ||||
value_type
|
std::pair<const Key, T> | ||||
size_type
|
Vorzeichenloser Ganzzahltyp (normalerweise std::size_t) | ||||
difference_type
|
Vorzeichenbehafteter Ganzzahltyp (normalerweise std::ptrdiff_t) | ||||
key_compare
|
Compare | ||||
allocator_type
|
Allocator | ||||
Referenz
|
value_type& | ||||
const_reference
|
const value_type& | ||||
Zeiger
|
| ||||
const_pointer
|
| ||||
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 Containerknoten repräsentiert | ||||
insert_return_type (seit C++17) |
Typ, der das Ergebnis des Einfügens eines node_type beschreibt, eine Spezialisierung vontemplate<class Iter, class NodeType> |
[edit] Member-Klassen
vergleicht Objekte vom Typ value_type(class) |
[edit] Member-Funktionen
konstruiert die map(public member function) | |
destruiert die map(public member function) | |
| weist dem Container Werte zu (public member function) | |
| gibt den zugehörigen Allocator zurück (public member function) | |
Elementzugriff | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function) | |
| greift auf ein Element zu oder fügt es ein (public member function) | |
Iteratoren | |
| (C++11) |
gibt einen Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Iterator zum Ende zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Ende zurück (public member function) |
Kapazität | |
| prüft, ob der Container leer ist (public member function) | |
| Gibt die Anzahl der Elemente zurück (public member function) | |
| Gibt die maximal mögliche Anzahl von Elementen zurück (public member function) | |
Modifizierer | |
| leert den Inhalt (public member function) | |
| fügt Elemente ein oder Knoten(seit C++17) (public member function) | |
| (C++23) |
fügt einen Bereich von Elementen ein (public member function) |
| (C++17) |
fügt ein Element ein oder weist einem vorhandenen Element einen Wert zu, falls der Schlüssel bereits existiert (public member function) |
| (C++11) |
konstruiert Elemente direkt (in-place) (public member function) |
| (C++11) |
konstruiert Elemente "in place" unter Verwendung eines Hinweises (public member function) |
| (C++17) |
fügt "in place" ein, wenn der Schlüssel nicht existiert, tut nichts, wenn der Schlüssel existiert (public member function) |
| entfernt Elemente (public member function) | |
| tauscht die Inhalte (public member function) | |
| (C++17) |
extrahiert Knoten aus dem Container (public member function) |
| (C++17) |
fügt Knoten aus einem anderen Container zusammen (public member function) |
Suche | |
| gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen (public member function) | |
| sucht ein Element mit einem bestimmten Schlüssel (public member function) | |
| (C++20) |
prüft, ob der Container ein Element mit einem bestimmten Schlüssel enthält (public member function) |
| gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen (public member function) | |
| gibt einen Iterator zum ersten Element zurück, das *nicht kleiner* als der gegebene Schlüssel ist (public member function) | |
| gibt einen Iterator zum ersten Element zurück, das *größer* als der gegebene Schlüssel ist (public member function) | |
Observer | |
| gibt die Funktion zurück, die Schlüssel vergleicht (public member function) | |
gibt die Funktion zurück, die Schlüssel in Objekten vom Typ value_type vergleicht(public member function) | |
[edit] 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 zwei maps lexikographisch(function template) |
| spezialisiert den Algorithmus std::swap (function template) | |
| (C++20) |
entfernt alle Elemente, die bestimmte Kriterien erfüllen (function template) |
Deduction Guides |
(seit C++17) |
[edit] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Bereichskonstruktion und -einfügung für Container |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::map |
[edit] 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
[edit] 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 musste außerdemCopyConstructible sein |
| LWG 464 | C++98 | Der Zugriff auf eine konstante map über den Schlüssel war unpraktisch |
at-Funktion bereitgestellt |
[edit] Siehe auch
| Sammlung von Schlüssel-Wert-Paaren, sortiert nach Schlüsseln (Klassenvorlage) | |
| (C++11) |
Sammlung von Schlüssel-Wert-Paaren, gehasht nach Schlüsseln, Schlüssel sind eindeutig (Klassenvorlage) |
| (C++23) |
passt zwei Container an, um eine Sammlung von Schlüssel-Wert-Paaren, sortiert nach eindeutigen Schlüsseln, bereitzustellen (Klassenvorlage) |