Back to questions
Junior — Middle
80
Какие условия необходимо выполнить, чтобы можно было использовать объект в качестве ключа для контейнера unordered_set?
Answer from AI
sobes.tech AI
Чтобы использовать объект в качестве ключа для контейнера unordered_set в C++, необходимо выполнить следующие условия:
-
Определить функцию хеширования для этого типа. По умолчанию
unordered_setиспользуетstd::hash<T>. Если для вашего типа нет специализацииstd::hash, нужно её написать или передать свою функцию хеширования. -
Определить оператор сравнения равенства (
operator==) для вашего типа, так какunordered_setиспользует его для проверки равенства ключей.
Пример:
struct MyKey {
int id;
std::string name;
bool operator==(const MyKey& other) const {
return id == other.id && name == other.name;
}
};
namespace std {
template<>
struct hash<MyKey> {
size_t operator()(const MyKey& k) const {
return hash<int>()(k.id) ^ (hash<std::string>()(k.name) << 1);
}
};
}
std::unordered_set<MyKey> mySet;
Таким образом, объект должен быть хешируемым и сравнимым на равенство.