Sobes.tech
Back to questions
Junior — Middle
94

Каким образом осуществляется сравнение объектов, используемых в качестве ключей в std::unordered_map?

Companies where asked
Телкор

Answer from AI

sobes.tech AI

В std::unordered_map объекты, используемые в качестве ключей, сравниваются с помощью функции равенства (Equality), которая по умолчанию — это std::equal_to<Key>.

При вставке или поиске ключа происходит:

  1. Вычисление хеш-кода ключа с помощью хеш-функции (по умолчанию std::hash<Key>).
  2. Поиск в соответствующей корзине (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;