Sobes.tech
Junior

Care este diferența dintre map și unordered_map în C++?

sobes.tech AI

Răspuns de la AI

std::map — un container asociativ care stochează perechi de tip "cheie-valoare", sortate după cheie. Bazat pe un arbore roșu-negru. Timpul de accesare, inserare și ștergere a elementelor este logaritmic (O(log n)).

std::unordered_map — un container asociativ care stochează perechi de tip "cheie-valoare" într-un tabel hash. Elementele nu sunt sortate. În medie, timpul de acces, inserare și ștergere a elementelor este constant (O(1)), dar în cel mai rău caz poate fi liniar (O(n)) din cauza coliziunilor. Necesită o funcție hash pentru tipul cheii și un operator de comparație pentru egalitate (operator==).

Caracteristici std::map std::unordered_map
Bază Arbore roșu-negru Tabel hash
Sortarea elementelor După cheie Nu
Complexitatea medie a operațiilor (acces, inserare, ștergere) O(log n) O(1)
Complexitatea în cel mai rău caz (acces, inserare, ștergere) O(log n) O(n) (în coliziuni)
Cerințe pentru cheie Operatorul < Funcție hash, operatorul ==
Consumul de memorie Mai mult Mai puțin (în medie, poate varia)

Exemplu de utilizare:

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

int main() {
    // Utilizare std::map
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Elementele sunt stocate în ordine sortată după cheie (apple, banana, orange)

    // Utilizare 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;
    // Elementele sunt stocate fără o ordine specifică
    
    return 0;
}