Junior — Middle
std::unordered_map'ta ачкыч катары колдонулган объекттердин салыштырылышы кандай жүргүзүлөт?
sobes.tech AI
AIден жооп
std::unordered_map объекттеринде ачкычтар (keys) теңдештик функциясы (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;