Sobes.tech
Junior — Middle

std::unordered_map'da kalit sifatida ishlatiladigan obyektlarning taqqoslanishi qanday amalga oshiriladi?

sobes.tech AI

AIdan javob

std::unordered_map ob'ektlarida, kalitlar standart ravishda std::equal_to<Key> yordamida solishtiriladi.

Kalitni qo'shish yoki qidirishda quyidagilar amalga oshiriladi:

  1. Kalitning hash kodi hash-funksiyasi yordamida hisoblanadi (standartda std::hash<Key>).
  2. Tegishli kovachada (bucket) kalitlar == operatori yoki belgilangan tenglik predikatidan foydalanib qidiriladi.

Agar kalitlar maxsus turlar bo'lsa, quyidagilarni qilish kerak:

  • Bu tur uchun std::hash ning maxsuslashtirilishini aniqlash yoki o'z hash-funksiyangizni taqdim etish.
  • == operatorini aniqlash yoki o'z tenglik funksiyangizni taqdim etish.

Misol:

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;