Sobes.tech
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:

  1. Cálculo del hash de la clave mediante la función hash (por defecto std::hash<Key>).
  2. 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;