Junior — Middle
Hoe wordt de vergelijking van objecten die als sleutels in std::unordered_map worden gebruikt uitgevoerd?
sobes.tech AI
Antwoord van AI
In objecten van std::unordered_map worden de sleutels vergeleken met behulp van de gelijkheidsfunctie (Equality), die standaard std::equal_to<Key> is.
Bij het invoegen of zoeken van een sleutel gebeurt:
- Het berekenen van de hash-code van de sleutel met behulp van de hash-functie (standaard std::hash<Key>).
- Het zoeken in de bijbehorende bak (bucket) door de sleutels te vergelijken met behulp van de operator == of een gedefinieerd gelijkheidsvoorwaarde.
Als de sleutels aangepaste typen zijn, is het nodig:
- Een specialisatie van std::hash voor dat type te definiëren of een eigen hash-functie te bieden.
- De operator == te definiëren of een eigen gelijkheidsfunctie te bieden.
Voorbeeld:
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;