Sobes.tech
Junior

Qual é a diferença entre map e unordered_map em C++?

sobes.tech IA

Resposta da IA

std::map — um contêiner associativo que armazena pares de "chave-valor", ordenados por chave. Baseado em uma árvore vermelho-preto. O tempo de acesso, inserção e remoção de elementos é logarítmico (O(log n)).

std::unordered_map — um contêiner associativo que armazena pares de "chave-valor" em uma tabela hash. Os elementos não são ordenados. Em média, o tempo de acesso, inserção e remoção de elementos é constante (O(1)), mas no pior caso pode ser linear (O(n)) devido a colisões. Requer uma função hash para o tipo de chave e um operador de comparação de igualdade (operator==).

Característica std::map std::unordered_map
Base Árvore vermelho-preto Tabela hash
Ordenação de elementos Por chave Não
Complexidade média de operações (acesso, inserção, remoção) O(log n) O(1)
Complexidade no pior caso (acesso, inserção, remoção) O(log n) O(n) (em colisões)
Requisitos para a chave < operador Função hash, == operador
Consumo de memória Maior Menor (em média, mas pode variar)

Exemplo de uso:

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

int main() {
    // Uso de std::map
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Os elementos são armazenados em ordem ordenada por chave (apple, banana, orange)

    // Uso de 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;
    // Os elementos são armazenados sem uma ordem definida
    
    return 0;
}