Sobes.tech
Junior

Wat is het verschil tussen map en unordered_map in C++?

sobes.tech AI

Antwoord van AI

std::map — een associatieve container die paren "sleutel-waarde" opslaat, gesorteerd op de sleutel. Gebaseerd op een rode-zwart boom. Toegangs-, invoeg- en verwijderingstijd is logaritmisch (O(log n)).

std::unordered_map — een associatieve container die paren "sleutel-waarde" opslaat in een hash-tabel. De elementen zijn niet gesorteerd. Gemiddeld is de toegang, invoeging en verwijderingstijd constant (O(1)), maar in het slechtste geval kan het lineair (O(n)) zijn door collisions. Vereist een hash-functie voor het sleuteltype en een gelijkheid operator (operator==).

Kenmerk std::map std::unordered_map
Basis Rode-zwart boom Hash-tabel
Sortering van elementen Op sleutel Geen
Gemiddelde complexiteit van operaties (toegang, invoegen, verwijderen) O(log n) O(1)
Slechtste complexiteit O(log n) O(n) (bij collisions)
Vereisten voor de sleutel < operator Hash-functie, == operator
Geheugengebruik Meer Minder (gemiddeld, kan variëren)

Voorbeeld van gebruik:

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

int main() {
    // Gebruik van std::map
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Elementen worden gesorteerd opgeslagen op sleutel (apple, banana, orange)

    // Gebruik van 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;
    // Elementen worden niet gesorteerd opgeslagen
    
    return 0;
}