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:
- Kalitning hash kodi hash-funksiyasi yordamida hisoblanadi (standartda std::hash<Key>).
- 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;