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

  1. Het berekenen van de hash-code van de sleutel met behulp van de hash-functie (standaard std::hash<Key>).
  2. 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;