0Pricing
C++ Academy · Lección

std::unordered_map

Búsqueda rápida basada en hash

std::unordered_map es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué es unordered_map?

std::unordered_map almacena pares clave-valor en una tabla hash. En promedio, las operaciones de búsqueda, inserción y borrado tienen tiempo constante, pero los elementos no tienen un orden definido.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> ages;
    ages["Alice"] = 30;
    ages["Bob"] = 25;
    std::cout << ages["Alice"] << '\n';
    return 0;
}

map frente a unordered_map

Elija según sus necesidades:

  • map: ordenado, con operaciones O(log n).
  • unordered_map: no ordenado, con operaciones O(1) en promedio.

Use unordered_map cuando solo necesite búsquedas rápidas.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, std::string> m{{3, "c"}, {1, "a"}, {2, "b"}};
    std::cout << m.size() << " entries (order not guaranteed)\n";
    return 0;
}

Insertar y actualizar

La misma API que map: use [], insert() o emplace().

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m;
    m["x"] = 1;
    m.insert({"y", 2});
    m.emplace("z", 3);
    std::cout << m.size() << '\n';
    return 0;
}

Buscar con find

find() devuelve un iterador o end(). Esto evita insertar accidentalmente un valor predeterminado, como ocurriría con [].

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"a", 1}};
    auto it = m.find("a");
    if (it != m.end()) std::cout << it->second << '\n';
    std::cout << "size: " << m.size() << '\n';
    return 0;
}

Comprobar la existencia

count() devuelve 0 o 1, y C++20 añade contains() para realizar una comprobación booleana clara.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"key", 99}};
    std::cout << m.count("key") << '\n';
    std::cout << m.count("missing") << '\n';
    return 0;
}

Recorrer

Puede recorrer los elementos, pero el orden no está especificado. Nunca suponga que están ordenados o que siguen el orden de inserción.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
    int total = 0;
    for (const auto& [k, v] : m) total += v;
    std::cout << "sum = " << total << '\n';
    return 0;
}

Borrar

erase() elimina por clave y devuelve el número de elementos eliminados.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}};
    m.erase("a");
    std::cout << m.count("a") << ' ' << m.size() << '\n';
    return 0;
}

Contar frecuencias rápidamente

Para conjuntos de datos grandes en los que el orden no importa, unordered_map cuenta las frecuencias más rápido que map.

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    std::string items[] = {"a", "b", "a", "c", "b", "a"};
    std::unordered_map<std::string, int> freq;
    for (const auto& s : items) freq[s]++;
    std::cout << "a appears " << freq["a"] << " times\n";
    return 0;
}

Usar at()

at() devuelve una referencia y lanza std::out_of_range si falta la clave; nunca inserta elementos.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"score", 42}};
    std::cout << m.at("score") << '\n';
    return 0;
}

Inserción predeterminada mediante []

Acceder a una clave inexistente con [] la inserta con un valor inicializado por valor (0 para los enteros). Tenga cuidado: el map crece silenciosamente.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m;
    std::cout << m["new"] << '\n';
    std::cout << "size: " << m.size() << '\n';
    return 0;
}

Vaciar el map

clear() vacía la tabla y empty() indica si no contiene elementos.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m{{1, 1}, {2, 2}};
    m.clear();
    std::cout << std::boolalpha << m.empty() << '\n';
    return 0;
}

Comprobación rápida

Compruebe su comprensión del orden de unordered_map.

Resumen

Ha aprendido que std::unordered_map:

  • usa una tabla hash para realizar operaciones O(1) en promedio
  • no tiene un orden garantizado
  • comparte la misma API que map (find, count, at, erase)

A continuación, verá unordered_set para almacenar elementos únicos rápidamente.

Preguntas frecuentes

¿La lección «std::unordered_map» es gratis?

Sí — el texto completo de «std::unordered_map» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «std::unordered_map»?

Búsqueda rápida basada en hash Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «std::unordered_map»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. std::unordered_map
  2. unordered_set
  3. Funciones hash personalizadas
  4. Consideraciones de rendimiento
← Volver a C++ Academy