Могу ли я определить карту, чей ключ является структурой?

и как я могу сделать это на C ++?

Вы можете использовать любой тип в качестве ключа карты, если он реализует operator< (плюс обычные требования к копированию и назначению для значений, хранящихся в контейнерах).

Например:

 struct example { int x; } bool operator < (const example &l, const example &r) { return lx < rx; } std::map values; 

В качестве альтернативы вы можете предоставить функцию сравнения в качестве третьего аргумента шаблона карты вместо определения operator< . Подробнее здесь (параметр Compare ).