Sobes.tech
Junior

¿Cuál es la diferencia entre map y unordered_map en C++?

sobes.tech AI

Respuesta de la IA

std::map — un contenedor asociativo que almacena pares de "clave-valor", ordenados por la clave. Basado en un árbol rojo-negro. El tiempo de acceso, inserción y eliminación de elementos es logarítmico (O(log n)).

std::unordered_map — un contenedor asociativo que almacena pares de "clave-valor" en una tabla hash. Los elementos no están ordenados. En promedio, el tiempo de acceso, inserción y eliminación de elementos es constante (O(1)), pero en el peor caso puede ser lineal (O(n)) debido a colisiones. Requiere una función hash para el tipo de clave y un operador de comparación de igualdad (operator==).

Característica std::map std::unordered_map
Base Árbol rojo-negro Tabla hash
Ordenación de elementos Por clave No
Complejidad media de operaciones (acceso, inserción, eliminación) O(log n) O(1)
Complejidad en el peor caso (acceso, inserción, eliminación) O(log n) O(n) (en colisiones)
Requisitos para la clave < operador Función hash, == operador
Consumo de memoria Mayor Menor (en promedio, pero puede variar)

Ejemplo 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;
    // Los elementos se almacenan en orden ordenado por clave (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;
    // Los elementos se almacenan sin un orden definido
    
    return 0;
}