Sobes.tech
Junior

Was ist der Unterschied zwischen map und unordered_map in C++?

sobes.tech KI

Antwort von AI

std::map — ein assoziativer Container, der Paare "Schlüssel-Wert" speichert, sortiert nach dem Schlüssel. Basierend auf einem Rot-Schwarz-Baum. Die Zugriffs-, Einfüge- und Löschzeiten sind logarithmisch (O(log n)).

std::unordered_map — ein assoziativer Container, der Paare "Schlüssel-Wert" in einer Hash-Tabelle speichert. Die Elemente sind nicht sortiert. Im Durchschnitt sind Zugriffs-, Einfüge- und Löschzeiten konstant (O(1)), im schlimmsten Fall können sie linear (O(n)) sein, bei Kollisionen. Erfordert eine Hash-Funktion für den Schlüsseltyp und einen Gleichheitsoperator (operator==).

Eigenschaft std::map std::unordered_map
Grundlage Rot-Schwarz-Baum Hash-Tabelle
Sortierung der Elemente Nach Schlüssel Keine
Durchschnittliche Komplexität O(log n) O(1)
Schlechteste Komplexität O(log n) O(n) (bei Kollisionen)
Anforderungen an den Schlüssel < Operator Hash-Funktion, == Operator
Speicherverbrauch Mehr Weniger (im Durchschnitt, kann variieren)

Beispiel für die Verwendung:

#include <map>
#include <unordered_map>
#include <string>

int main() {
    // Verwendung von std::map
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Elemente sind sortiert nach Schlüssel (apple, banana, orange)

    // Verwendung von std::unordered_map
    std::unordered_map<std::string, int> my_unordered_map;
    my_unordered_map["apple"] = 1;
    my_unordered_map["banana"] = 2;
    my_unordered_map["orange"] = 3;
    // Elemente sind ungeordnet
    
    return 0;
}