Все, что требуется от ключа, состоит в том, что оно может копироваться и присваиваться. Порядок в карте определяется третьим аргументом шаблона (и аргументом для конструктора, если он используется). Этот параметр по умолчанию равен std::less<KeyType>
, по умолчанию используется оператор <
, но нет необходимости использовать значения по умолчанию. Просто напишите оператор сравнения (желательно как функциональный объект):
struct CmpMyType
{
bool operator()( MyType const& lhs, MyType const& rhs ) const
{
// ...
}
};
Обратите внимание, что он должен определять строгий порядок, т. Е. Если CmpMyType()( a, b
)
возвращает true, тогда CmpMyType()( b, a )
должен возвращать значение false, а если оба возвращают false, элементы считаются равными (члены одного и того же класса эквивалентности).