Sobes.tech
Junior

Aký je rozdiel medzi map a unordered_map v C++?

sobes.tech AI

Odpoveď od AI

std::map — asociačný kontajner, ktorý uchováva páry "kľúč-hodnota", zoradené podľa kľúča. Založený na červeno-čiernom strome. Čas prístupu, vkladania a mazania prvkov je logaritmický (O(log n)).

std::unordered_map — asociačný kontajner, ktorý uchováva páry "kľúč-hodnota" v hash tabuľke. Prvky nie sú zoradené. Priemerný čas prístupu, vkladania a mazania je konštantný (O(1)), ale v najhoršom prípade môže byť lineárny (O(n)) kvôli kolíziám. Vyžaduje hashovaciu funkciu pre typ kľúča a operátor rovnosti (operator==).

Charakteristika std::map std::unordered_map
Základ Červeno-čierne strom Hash tabuľka
Zoradenie prvkov Podľa kľúča Nie
Priemerná zložitosť operácií (prístup, vkladanie, mazanie) O(log n) O(1)
Najhoršia zložitosť O(log n) O(n) (pri kolíziách)
Požiadavky na kľúč < operátor Hash funkcia, == operátor
Pamäťová náročnosť Viac Menej (v priemere, môže sa líšiť)

Príklad použitia:

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

int main() {
    // Použitie std::map
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Prvky sú zoradené podľa kľúča (apple, banana, orange)

    // Použitie 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;
    // Prvky nie sú zoradené
    
    return 0;
}