Sobes.tech
Junior — Middle
138

Cum se realizează compararea obiectelor utilizate ca chei în std::unordered_map?

Companiile au fost întrebate
Телкор

Răspuns de la AI

sobes.tech AI

În obiectele std::unordered_map, cheile sunt comparate folosind funcția de egalitate (Equality), care implicit este std::equal_to<Key>.

La inserare sau căutare a unei chei, se procedează astfel:

  1. Se calculează codul hash al cheii folosind funcția de hash (implicit std::hash<Key>).
  2. Se caută în coșul (bucket) corespunzător, comparând cheile cu operatorul == sau cu un predicat de egalitate definit.

Dacă cheile sunt tipuri personalizate, este necesar:

  • Să se definească o specializare a std::hash pentru acest tip sau să se furnizeze propria funcție de hash.
  • Să se definească operatorul == sau să se furnizeze propria funcție de comparare a egalității.

Exemplu:

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;