Junior — Middle
Como é feita a comparação de objetos usados como chaves em std::unordered_map?
sobes.tech IA
Resposta da IA
Nos objetos std::unordered_map, as chaves são comparadas usando a função de igualdade (Equality), que por padrão é std::equal_to<Key>.
Ao inserir ou procurar uma chave, o processo é:
- Cálculo do código hash da chave usando a função hash (por padrão std::hash<Key>).
- Pesquisa na cesta (bucket) correspondente usando comparação de chaves com o operador == ou um predicado de igualdade definido.
Se as chaves forem tipos personalizados, é necessário:
- Definir uma especialização de std::hash para esse tipo ou fornecer uma função hash própria.
- Definir o operador == ou fornecer uma função de comparação de igualdade própria.
Exemplo:
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;