Sobes.tech
Junior

Mi a különbség a map és az unordered_map között a C++-ban?

sobes.tech MI

Válasz az MI-től

std::map — egy asszociatív tároló, amely "kulcs-érték" párokat tárol, rendezve a kulcs szerint. Egy piros-fekete fa alapú. Az elérés, beszúrás és törlés idő logaritmikus (O(log n)).

std::unordered_map — egy asszociatív tároló, amely "kulcs-érték" párokat tárol hash táblában. Az elemek nem rendezettek. Átlagosan az elérés, beszúrás és törlés időállandó (O(1)), de legrosszabb esetben lineáris (O(n)) lehet a kollíziók miatt. Egy hash függvény szükséges a kulcs típusához és egy egyenlőség operátor (operator==).

Jellemző std::map std::unordered_map
Alap Piros-fekete fa Hash tábla
Elemek rendezése Kulcs szerint Nincs rendezés
Átlagos műveleti komplexitás O(log n) O(1)
Legrosszabb esetben O(log n) O(n) (ütközések esetén)
Követelmények a kulcsra < operátor Hash függvény, == operátor
Memóriahasználat Többet Kevesebbet (átlagosan, változhat)

Használati példa:

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

int main() {
    // std::map használata
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Az elemek rendezve tárolódnak kulcs szerint (apple, banana, orange)

    // std::unordered_map használata
    std::unordered_map<std::string, int> my_unordered_map;
    my_unordered_map["apple"] = 1;
    my_unordered_map["banana"] = 2;
    my_unordered_map["orange"] = 3;
    // Az elemek rendezés nélkül tárolódnak
    
    return 0;
}