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;