std::unordered_map
Schnelle hashbasierte Suche
std::unordered_map ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist unordered_map?
std::unordered_map speichert Schlüssel-Wert-Paare in einer Hash-Tabelle. Suchen, Einfügen und Löschen benötigen im Durchschnitt konstante Zeit, aber die Elemente haben keine sortierte Reihenfolge.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << ages["Alice"] << '\n';
return 0;
}map oder unordered_map
Wählen Sie je nach Bedarf:
map: sortiert, Operationen mit O(log n).unordered_map: ungeordnet, Operationen mit durchschnittlich O(1).
Verwenden Sie unordered_map, wenn Sie nur schnelle Suchen benötigen.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> m{{3, "c"}, {1, "a"}, {2, "b"}};
std::cout << m.size() << " entries (order not guaranteed)\n";
return 0;
}Einfügen und Aktualisieren
Dieselbe API wie bei map: Verwenden Sie [], insert() oder emplace().
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
m["x"] = 1;
m.insert({"y", 2});
m.emplace("z", 3);
std::cout << m.size() << '\n';
return 0;
}Suchen mit find
find() gibt einen Iterator oder end() zurück. So vermeiden Sie, versehentlich einen Standardwert einzufügen, wie es bei [] geschehen würde.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}};
auto it = m.find("a");
if (it != m.end()) std::cout << it->second << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Existenz prüfen
count() gibt 0 oder 1 zurück. Außerdem bietet C++20 mit contains() eine eindeutige boolesche Prüfung.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"key", 99}};
std::cout << m.count("key") << '\n';
std::cout << m.count("missing") << '\n';
return 0;
}Durchlaufen
Sie können den Container durchlaufen, aber die Reihenfolge ist nicht spezifiziert. Verlassen Sie sich niemals darauf, dass sie sortiert ist oder der Einfügereihenfolge entspricht.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
int total = 0;
for (const auto& [k, v] : m) total += v;
std::cout << "sum = " << total << '\n';
return 0;
}Löschen
erase() entfernt Elemente anhand des Schlüssels und gibt die Anzahl der entfernten Elemente zurück.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}};
m.erase("a");
std::cout << m.count("a") << ' ' << m.size() << '\n';
return 0;
}Häufigkeiten schnell zählen
Bei großen Datenmengen, bei denen die Reihenfolge keine Rolle spielt, zählt unordered_map Häufigkeiten schneller als map.
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::string items[] = {"a", "b", "a", "c", "b", "a"};
std::unordered_map<std::string, int> freq;
for (const auto& s : items) freq[s]++;
std::cout << "a appears " << freq["a"] << " times\n";
return 0;
}at() verwenden
at() gibt eine Referenz zurück und löst bei einem fehlenden Schlüssel std::out_of_range aus, ohne jemals ein Element einzufügen.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"score", 42}};
std::cout << m.at("score") << '\n';
return 0;
}Standardeinfügung über []
Der Zugriff auf einen fehlenden Schlüssel mit [] fügt ihn mit einem wertinitialisierten Wert ein (bei int also mit 0). Seien Sie vorsichtig: Die Map wächst dadurch stillschweigend.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
std::cout << m["new"] << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Die Map leeren
clear() leert die Tabelle, und empty() gibt an, ob sie keine Elemente enthält.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, int> m{{1, 1}, {2, 2}};
m.clear();
std::cout << std::boolalpha << m.empty() << '\n';
return 0;
}Kurze Überprüfung
Testen Sie Ihr Verständnis der Reihenfolge in unordered_map.
Zusammenfassung
Sie haben gelernt, dass std::unordered_map:
- für Operationen mit durchschnittlich O(1) eine Hash-Tabelle verwendet
- keine garantierte Reihenfolge besitzt
- dieselbe API wie
mapverwendet (find,count,at,erase)
Als Nächstes sehen Sie unordered_set zum schnellen Speichern eindeutiger Elemente.
Häufig gestellte Fragen
Ist die Lektion „std::unordered_map“ kostenlos?
Ja — der vollständige Text von „std::unordered_map“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „std::unordered_map“?
Schnelle hashbasierte Suche Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „std::unordered_map“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.