Вы можете использовать любой тип в качестве ключа карты, если он реализует operator<
(плюс обычные требования для копирования и назначения для значений, хранящихся в контейнерах).
Например:
struct example { int x; }
bool operator < (const example &l, const example &r) { return l.x < r.x; }
std::map<example, int> values;
В качестве альтернативы вы можете предоставить функцию сравнения в качестве третьего аргумента шаблона карты вместо определения operator<
. Подробнее здесь (параметр Compare
).