Чтобы хранить структуру в std::unordered_map в качестве ключа, необходимо предоставить:
operator==): Сравнивает два экземпляра структуры на равенство.Существует несколько способов предоставить эти элементы:
Перегрузить operator== внутри структуры и специализировать std::hash для вашей структуры. Это наиболее распространенный и рекомендуемый подход.
cpp
Предоставить функции хеширования и сравнения как отдельные параметры шаблона при объявлении unordered_map. Менее удобно, если вы часто используете структуру как ключ, так как нужно указывать типы компаратора и хешера при каждом объявлении контейнера.
cpp
Важные моменты:
a и b, если a == b, то hash(a) должно быть равно hash(b). Обратное не требуется (разные ключи могут иметь одинаковый хеш – коллизии).O(1) в среднем).const, так как они не должны изменять объект ключа.