В стандартной библиотеке C++ для использования типа в качестве ключа в std::map или std::unordered_map он должен обладать следующими свойствами:
Для std::map (на основе красно-черного дерева):
<. Этот оператор < должен быть:
x < x всегда ложно.f(x, y) и f(y, z) истинны, то f(x, z) тоже истинно (где f - отношение, например, <).x < y истинно, то y < x ложно.Для std::unordered_map (на основе хеш-таблицы):
std::size_t на основе объекта данного типа. Обычно это реализуется:
std::hash для данного типа.std::hash или предоставить хеш-функтор при создании контейнера.==. Этот оператор должен быть:
x == x всегда истинно.x == y истинно, то y == x тоже истинно.x == y и y == z истинны, то x == z тоже истинно.Пример специализации std::hash:
cpp
Пример компаратора для std::map:
cpp