0Pricing
C++ Academy · Lektion

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 map verwendet (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.

Alle Lektionen in diesem Kurs

  1. std::unordered_map
  2. unordered_set
  3. Benutzerdefinierte Hashfunktionen
  4. Überlegungen zur Performance
← Zurück zu C++ Academy