std::unordered_map
ist ein assoziativer Container, der Schlüssel-Wert-Paare mit eindeutigen Schlüsseln enthält. Suche, Einfügung und Entfernung von Elementen haben durchschnittlich konstante Zeitkomplexität.
Internally werden die Elemente nicht in einer bestimmten Reihenfolge sortiert, sondern in Buckets organisiert. In welchen Bucket ein Element platziert wird, hängt vollständig vom Hash seines Schlüssels ab. Schlüssel mit demselben Hashcode erscheinen im selben Bucket. Dies ermöglicht einen schnellen Zugriff auf einzelne Elemente, da sobald der Hash berechnet ist, dieser auf den Bucket verweist, der das Element enthält.
Zwei Schlüssel werden als
äquivalent
betrachtet, wenn das Schlüsselgleichheitsprädikat der Map bei Übergabe dieser Schlüssel true zurückgibt. Wenn zwei Schlüssel äquivalent sind, muss die Hash-Funktion für beide Schlüssel denselben Wert zurückgeben.
Alle Memberfunktionen von
std::unordered_map
sind
constexpr
: Es ist möglich,
std::unordered_map
-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.
Allerdings können
std::unordered_map
-Objekte im Allgemeinen nicht
constexpr
sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.
Die Swap-Funktionen machen keine Iteratoren innerhalb des Containers ungültig, aber sie machen den Iterator ungültig, der das Ende der Swap-Region markiert.
Referenzen und Zeiger auf entweder Schlüssel oder Daten, die im Container gespeichert sind, werden nur durch das Löschen dieses Elements ungültig, selbst wenn der entsprechende Iterator ungültig wird.
Template-Parameter
Dieser Abschnitt ist unvollständig
Grund: Beschreibungen der Template-Parameter hinzufügen.
einem Iteratortyp, dessen Kategorie-, Wert-, Differenz-, Zeiger- und Referenztypen mit denen von iterator übereinstimmen. Dieser Iterator kann verwendet werden, um durch einen einzelnen Bucket, aber nicht über Buckets hinweg zu iterieren.
const_local_iterator
einem Iteratortyp, dessen Kategorie-, Wert-, Differenz-, Zeiger- und Referenztypen mit denen von const_iterator übereinstimmen. Dieser Iterator kann verwendet werden, um durch einen einzelnen Bucket, aber nicht über Buckets hinweg zu iterieren.
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
#include <iostream>#include <string>#include <unordered_map>int main(){// Erstelle eine unordered_map von drei Strings (die auf Strings abbilden)
std::unordered_map<std::string, std::string> u ={{"RED", "#FF0000"},
{"GREEN", "#00FF00"},
{"BLUE", "#0000FF"}};// Hilfs-Lambda-Funktion zum Ausgeben von Schlüssel-Wert-Paarenauto print_key_value =[](constauto& key, constauto& value){std::cout<<"Key:["<< key <<"] Value:["<< value <<"]\n";};std::cout<<"Iteriere und gebe Schlüssel-Wert-Paare der unordered_map aus, wobei\n""explizit mit ihren Typen gearbeitet wird:\n";for(conststd::pair<conststd::string, std::string>& n : u)
print_key_value(n.first, n.second);std::cout<<"\nIteriere und gebe Schlüssel-Wert-Paare mit C++17 Structured Binding aus:\n";for(constauto&[key, value]: u)
print_key_value(key, value);// Füge zwei neue Einträge zur unordered_map hinzu
u["BLACK"]="#000000";
u["WHITE"]="#FFFFFF";std::cout<<"\nGebe Werte nach Schlüssel aus:\n""Der HEX-Wert der Farbe ROT ist:["<< u["RED"]<<"]\n""Der HEX-Wert der Farbe SCHWARZ ist:["<< u["BLACK"]<<"]\n\n";std::cout<<"Verwende operator[] mit nicht-existierendem Schlüssel zum Einfügen eines neuen Schlüssel-Wert-Paares:\n";
print_key_value("new_key", u["new_key"]);std::cout<<"\nIteriere und gebe Schlüssel-Wert-Paare mit `auto` aus;\n""new_key ist nun einer der Schlüssel in der Map:\n";for(constauto& n : u)
print_key_value(n.first, n.second);}
Mögliche Ausgabe:
Iteriere und gebe Schlüssel-Wert-Paare der unordered_map aus, wobei
explizit mit ihren Typen gearbeitet wird:
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
Key:[RED] Value:[#FF0000]
Iteriere und gebe Schlüssel-Wert-Paare mit C++17 Structured Binding aus:
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
Key:[RED] Value:[#FF0000]
Gebe Werte nach Schlüssel aus:
Der HEX-Wert der Farbe ROT ist:[#FF0000]
Der HEX-Wert der Farbe SCHWARZ ist:[#000000]
Verwende operator[] mit nicht-existierendem Schlüssel zum Einfügen eines neuen Schlüssel-Wert-Paares:
Key:[new_key] Value:[]
Iteriere und gebe Schlüssel-Wert-Paare mit `auto` aus;
new_key ist nun einer der Schlüssel in der Map:
Key:[new_key] Value:[]
Key:[WHITE] Value:[#FFFFFF]
Key:[BLACK] Value:[#000000]
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
Key:[RED] Value:[#FF0000]
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.