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
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
|
(seit C++26) |
Inhaltsverzeichnis |
Template-Parameter
|
Dieser Abschnitt ist unvollständig
Grund: Beschreibungen der Template-Parameter hinzufügen. |
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
|
|
||||
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 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
>
|
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 |
|
|
(C++11)
|
gibt einen Iterator zum Anfang zurück
(öffentliche Member-Funktion) |
|
(C++11)
|
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion) |
|
(C++11)
|
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) |
|
|
(C++23)
|
fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion) |
|
(C++17)
|
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) |
|
(C++11)
|
Konstruiert Elemente direkt unter Verwendung eines Hinweises
(öffentliche Member-Funktion) |
|
(C++17)
|
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) |
|
|
(C++20)
|
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) |
|
|
(C++11)
|
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) |