Junior — Middle
როგორ ხორციელდება ობიექტების შედარება, რომლებიც გამოიყენება std::unordered_map-ის გასაღებად?
sobes.tech AI
პასუხი AI-სგან
std::unordered_map ობიექტებში, გასაღებები შედარებულია თანასწორობის ფუნქციით (Equality), რომელიც საწყისად არის std::equal_to<Key>.
საკვანძო დამატების ან ძიების დროს, პროცესი ასე ხდება:
- გასაღების ჰეშ-კოდის გამოთვლა ჰეშ-ფუნქციის (სტანდარტულად std::hash<Key>) გამოყენებით.
- შესაბამის კუბში (bucket) ძიება, სადაც შედარება ხდება == ოპერატორით ან განსაზღვრული თანასწორობის პრედიკატით.
თუ გასაღებები პერსონალიზებული ტიპებია, საჭიროა:
- std::hash-ის სპეციალიზაციის განსაზღვრა ამ ტიპისთვის ან საკუთარი ჰეშ-ფუნქციის მიწოდება.
- == ოპერატორის განსაზღვრა ან საკუთარი თანასწორობის ფუნქციის მიწოდება.
მაგალითი:
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;