2013-07-04 12 views

Odpowiedz

14

Nie jest to udokumentowane (and it's a mistake, I think), ale możesz wyspecjalizować funkcję szablonów qMapLessThanKey dla swoich typów (porównaj the source). Który pozwoli twój typ użyć innej funkcji zamiast operator<:

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

Niemniej std :: map ma tę zaletę, że można określić inny komparator za każdym mapie, a tu nie można (wszystkie mapy korzystające z Twojego typu muszą widzieć specjalizację lub wszystko się rozpadnie).

1

Nie, o ile wiem, QMap nie ma tej funkcjonalności, wymaga, aby jego typ kluczowy miał operatora <, więc utknąłeś w std :: map, jeśli naprawdę potrzebujesz funkcji porównywania. Aby uzyskać klucz

1

QMap, należy podać operator<(). QMap używa go do sortowania pozycji i przyjmuje, że dwa klucze xiy są równe, jeśli ani x < y ani y < x nie jest prawdziwe.

W przypadku przeciążenia operator<().