Sobes.tech
Junior — Middle
137

std::unordered_map-da açar kimi istifadə olunan obyektlərin müqayisəsi necə həyata keçirilir?

Şirkətlər soruşuldu
Телкор

AI-dan cavab

sobes.tech Süni İntellekt

std::unordered_map obyektlərində, açarlar (keys) bərabərlik funksiyası (Equality) ilə müqayisə olunur və bu funksiya standart olaraq std::equal_to<Key> dir.

Açar əlavə edilərkən və ya axtararkən, aşağıdakı proses həyata keçirilir:

  1. Açarın hash kodu hash funksiyası (standart olaraq std::hash<Key>) ilə hesablanır.
  2. Müvafiq kovada (bucket) açarlar == operatoru və ya təyin olunmuş bərabərlik predikatı ilə müqayisə edilərək axtarılır.

Əgər açarlar xüsusi tiplərdirsə, aşağıdakı addımlar lazımdır:

  • Bu tip üçün std::hash-in ixtisaslaşmasını təyin etmək və ya öz hash funksiyanızı təmin etmək.
  • == operatorunu və ya öz bərabərlik müqayisə funksiyanızı təmin etmək.

Nümunə:

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;