Поддерживает ли QMap пользовательские функции компаратора?

Я не мог найти способ установить пользовательскую функцию-компаратор для QMap, как я могу для std::map (часть аргументов шаблона typename _Compare = std::less<_Key>).

Есть ли способ QMap установить один?

Ответ 1

Это не документировано (и это ошибка, я думаю), но вы можете специализировать функцию шаблона qMapLessThanKey для ваших типов (см. источник). Это позволит вашему типу использовать другую функцию, а не operator<:

template<> bool qMapLessThanKey<int>(const int &key1, const int &key2) 
{ 
    return key1 > key2;  // sort by operator> !
}

Тем не менее, std:: map имеет то преимущество, что вы можете указать другой компаратор на каждую карту, тогда как здесь вы не можете (все карты, использующие ваш тип, должны видеть эту специализацию, или все будет разваливаться).

Ответ 2

Нет, насколько я знаю, что QMap не имеет такой функциональности, для этого требуется, чтобы у этого типа ключа был оператор <, поэтому вы застряли в std:: map, если вам действительно нужна эта функция сравнения.

Ответ 3

QMap тип ключа должен предоставлять operator<(). QMap использует его для сортировки своих элементов и предполагает, что два ключа x и y равны, если ни x < y или y < x истинно.

В случае перегрузки operator<().