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;