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;