Назад к вопросам
Junior — Middle
95
Каким образом осуществляется сравнение объектов, используемых в качестве ключей в std::unordered_map?
Компании, где спрашивали
Телкор
Ответ от нейросети
sobes.tech 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;