Sobes.tech
Junior — Middle
136

Kaip atliekamas objektų, naudojamų kaip raktai std::unordered_map, palyginimas?

Įmonės kur klausė
Телкор

Atsakymas iš AI

sobes.tech AI

Objektuose std::unordered_map raktai lyginami naudojant lygybės funkciją (Equality), kuri pagal numatytuosius nustatymus yra std::equal_to<Key>.

Pridedant ar ieškant rakto, vyksta:

  1. Raktas yra apskaičiuojamas naudojant hash funkciją (numatyta std::hash<Key>).
  2. Ieškoma atitinkamoje kibire (bucket), lyginant raktus naudojant == operatorių arba nustatytą lygybės predikatą.

Jei raktai yra naudotojo apibrėžti tipai, būtina:

  • Apibrėžti std::hash specializaciją šiam tipui arba pateikti savo hash funkciją.
  • Apibrėžti == operatorių arba pateikti savo lygybės funkciją.

Pavyzdys:

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;