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:
- Açarın hash kodu hash funksiyası (standart olaraq std::hash<Key>) ilə hesablanır.
- 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;