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

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

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

10

Решение

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

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

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

14

Другие решения

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

1

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

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

1
По вопросам рекламы [email protected]