Junior — Middle
Comment la comparaison des objets utilisés comme clés dans std::unordered_map est-elle effectuée?
sobes.tech IA
Réponse de l'IA
Dans les objets std::unordered_map, les clés sont comparées à l'aide d'une fonction d'égalité (Equality), qui par défaut est std::equal_to<Key>.
Lors de l'insertion ou de la recherche d'une clé, le processus est le suivant :
- Calcul du code de hachage de la clé à l'aide de la fonction de hachage (par défaut std::hash<Key>).
- Recherche dans la case correspondante (bucket) en comparant les clés avec l'opérateur == ou un prédicat d'égalité défini.
Si les clés sont des types personnalisés, il est nécessaire de :
- Définir une spécialisation de std::hash pour ce type ou de fournir une fonction de hachage personnalisée.
- Définir l'opérateur == ou fournir une fonction de comparaison d'égalité personnalisée.
Exemple :
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;