C++-Standardbibliothek<unordered_map>

In C++,<unordered_map>Ist Teil der Standard Template Library (STL) und bietet einen auf Hash-Tabellen basierenden Container für Schlüssel-Wert-Paare.

undstd::mapAnders,unordered_mapGarantiert nicht die Reihenfolge der Elemente, bietet aber normalerweise eine schnellere Suchgeschwindigkeit.

unordered_mapIst ein assoziativer Container, der Schlüssel-Wert-Paare speichert, wobei jeder Schlüssel eindeutig ist.unordered_mapVerwendet eine Hash-Tabelle zum Speichern von Elementen, wodurch es eine durchschnittliche konstante Zeitkomplexität für Such-, Einfüge- und Löschvorgänge erhält.

Syntax

Die folgenden sindunordered_mapGrundlegende Syntax:

#include <unordered_map>

std::unordered_map<key_type, value_type> map_name;
  • key_typeist der Typ des Schlüssels.
  • value_typeist der Typ des Werts.

Konstruktor

unordered_mapEs kann auf verschiedene Arten konstruiert werden:

// 默认构造
std::unordered_map<int, std::string> myMap;

// 构造并初始化
std::unordered_map<int, std::string> myMap = {{1, "one"}, {2, "two"}};

// 构造并指定初始容量
std::unordered_map<int, std::string> myMap(10);

// 构造并复制另一个 unordered_map
std::unordered_map<int, std::string> anotherMap = myMap;

Grundlegende Operationen

Elemente einfügen:

myMap.insert({3, "three"});

Auf Elemente zugreifen:

std::string value = myMap[1]; // 获取键为1的值

Elemente löschen:

myMap.erase(1); // 删除键为1的元素

Elemente finden:

auto it = myMap.find(2); // 查找键为2的元素
if (it != myMap.end()) {
    std::cout << "Found: " << it->second << std::endl;
}

Beispiel

Nachfolgend ein Beispiel unter Verwendung vonunordered_mapein einfaches Beispiel, einschließlich des Ausgabeergebnisses.

Beispiel

#include <iostream>
#include <unordered_map>

int main() {
    // Erstelle eine unordered_map mit int-Schlüsseln und String-Werten
    std::unordered_map<int, std::string> myMap;

    // Einige Schlüssel-Wert-Paare einfügen
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";

    // Alle Elemente ausgeben
    for (const auto& pair : myMap) {
        std::cout << "Schlüssel: " << pair.first << ", Wert: " << pair.second << std::endl;
    }

    // Auf den Wert eines bestimmten Schlüssels zugreifen
    std::cout << "Wert für Schlüssel 2: " << myMap[2] << std::endl;

    // Das Element mit Schlüssel 1 löschen
    myMap.erase(1);

    // Alle Elemente erneut ausgeben
    std::cout << "Nach dem Löschen von Schlüssel 1:" << std::endl;
    for (const auto& pair : myMap) {
        std::cout << "Schlüssel: " << pair.first << ", Wert: " << pair.second << std::endl;
    }

    return 0;
}

Ausgabe:

Key: 1, Value: one
Key: 2, Value: two
Key: 3, Value: three
Value for key 2: two
After erasing key 1:
Key: 2, Value: two
Key: 3, Value: three

Hinweise

  • unordered_mapDie Reihenfolge der Elemente ist nicht garantiert, daher kann die Iterationsreihenfolge der Elemente bei verschiedenen Ausführungen variieren.
  • Die Leistung der Hash-Tabelle hängt von einer guten Hash-Funktion ab, um übermäßige Hash-Kollisionen zu vermeiden.
  • undstd::mapIm Vergleich dazu,unordered_mapKann mehr Speicher belegen, wenn die Anzahl der Elemente klein ist.
Weitere Erweiterungen