Я думаю, что есть недопонимание того, что требует map
.
map
не требует от вашего класса определения operator<
. Требуется передать подходящий предикат сравнения, который по умолчанию имеет значение std::less<Key>
, которое использует operator<
для Key
.
Вы не должны использовать operator<
, чтобы соответствовать ключу в map
. Вы должны реализовать его, только если вы определите его для этого класса: т.е. если он имеет смысл.
Вы можете прекрасно определить предикат:
struct Compare: std::binary_function<Key,Key,bool>
{
bool operator()(const Key& lhs, const Key& rhs) const { ... }
};
А потом:
typedef std::map<Key,Value,Compare> my_map_t;