Sobes.tech
Junior — Middle

Kā tiek veikta objektu salīdzināšana, kas tiek izmantoti kā atslēgas std::unordered_map?

sobes.tech AI

Atbilde no AI

Objektos std::unordered_map, atslēgas tiek salīdzinātas ar vienādības funkciju (Equality), kas pēc noklusējuma ir std::equal_to<Key>.

Pievienojot vai meklējot atslēgu, notiek šādi:

  1. Atslēgas hash koda aprēķins, izmantojot hash funkciju (noklusējuma std::hash<Key>).
  2. Meklēšana atbilstošajā grozā (bucket), salīdzinot atslēgas ar operatoru == vai noteikto vienādības predikātu.

Ja atslēgas ir pielāgoti tipi, ir nepieciešams:

  • Definēt std::hash specializāciju šim tipam vai nodrošināt savu hash funkciju.
  • Definēt operatoru == vai nodrošināt savu vienādības funkciju.

Piemērs:

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;