Sobes.tech
Junior

Jaka jest różnica między map a unordered_map w C++?

sobes.tech AI

Odpowiedź od AI

std::map — kontener asocjacyjny przechowujący pary "klucz-wartość", posortowane według klucza. Oparty na drzewie czerwono-czarnym. Czas dostępu, wstawiania i usuwania elementów jest logarytmiczny (O(log n)).

std::unordered_map — kontener asocjacyjny przechowujący pary "klucz-wartość" w tabeli haszującej. Elementy nie są posortowane. Średni czas dostępu, wstawiania i usuwania elementów jest stały (O(1)), ale w najgorszym przypadku może być liniowy (O(n)) z powodu kolizji. Wymaga funkcji haszującej dla typu klucza i operatora porównania równości (operator==).

Charakterystyka std::map std::unordered_map
Podstawa Drzewo czerwono-czarne Tablica haszująca
Sortowanie elementów Według klucza Brak
Średnia złożoność operacji (dostęp, wstawianie, usuwanie) O(log n) O(1)
Najgorsza złożoność operacji O(log n) O(n) (w przypadku kolizji)
Wymagania dotyczące klucza < operator Funkcja haszująca, == operator
Zużycie pamięci Większe Mniejsze (średnio, może się różnić)

Przykład użycia:

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

int main() {
    // Użycie std::map
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Elementy są posortowane według klucza (apple, banana, orange)

    // Użycie 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;
    // Elementy są nieposortowane
    
    return 0;
}