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
- std::unordered_map
- unordered_set
- Funciones hash personalizadas
- Consideraciones de rendimiento