Я не мог найти способ установить пользовательскую функцию компаратора для QMap
как я могу для std::map
( typename _Compare = std::less<_Key>
часть его шаблонных аргументов).
Есть ли QMap
есть способ установить один?
Это не задокументировано (и это ошибка, я думаю), но в вас можно специализировать qMapLessThanKey
функция шаблона для ваших типов (ср. источник). Это позволит вашему типу использовать какую-то другую функцию, а не operator<
:
template<> bool qMapLessThanKey<int>(const int &key1, const int &key2)
{
return key1 > key2; // sort by operator> !
}
Тем не менее, std :: map имеет то преимущество, что вы можете указать другой компаратор за каждую карту, в то время как здесь вы не можете (все карты, использующие ваш тип, должны видеть эту специализацию, иначе все развалится).
Нет, насколько я знаю, QMap не имеет такой функциональности, он требует, чтобы его тип ключа имел оператор<, так что вы застряли с std :: map, если вам действительно нужна эта функция сравнения.
QMap
тип ключа должен предоставить operator<()
, QMap
использует его для сортировки своих элементов и предполагает, что два ключа x и y равны, если ни x < у ни у < х это правда.
В случае перегрузки operator<()
,