Junior — Middle
¿Cómo se realiza la comparación de objetos utilizados como claves en std::unordered_map?
sobes.tech AI
Respuesta de la IA
En objetos std::unordered_map, las claves se comparan mediante la función de igualdad (Equality), que por defecto es std::equal_to<Key>.
Al insertar o buscar una clave, se realiza:
- Cálculo del hash de la clave mediante la función hash (por defecto std::hash<Key>).
- Búsqueda en la cubeta correspondiente mediante comparación de claves usando el operador == o un predicado de igualdad definido.
Si las claves son tipos personalizados, es necesario:
- Definir una especialización de std::hash para ese tipo o proporcionar una función hash propia.
- Definir el operador == o proporcionar una función de comparación de igualdad propia.
Ejemplo:
struct Key {
int id;
bool operator==(const Key& other) const {
return id == other.id;
}
};
namespace std {
template<>
struct hash<Key> {
size_t operator()(const Key& k) const {
return std::hash<int>()(k.id);
}
};
}
std::unordered_map<Key, std::string> map;