2013-07-04 9 views

Antwort

14

Es ist nicht dokumentiert (and it's a mistake, I think), aber in Sie können die qMapLessThanKey Template-Funktion für Ihre Typen (vgl the source) spezialisiert sind. Das erlaubt Ihren Typ eher eine andere Funktion zu verwenden, als operator<:

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

Dennoch std :: map hat den Vorteil, dass Sie einen anderen Komparator pro jeder Karte angeben können, während hier kann man nicht (Alle Karten, die deinen Typ verwenden, müssen diese Spezialisierung sehen, sonst wird alles auseinanderfallen.

1

Nein, soweit ich weiß QMap verfügt nicht über diese Funktionalität es erfordert, dass es der Schlüsseltyp ist Operator < haben, so dass Sie mit std :: map stecken bleiben, wenn Sie wirklich diese vergleichen Funktionalität benötigen.

1

QMap Schlüsseltyp muss operator<() bereitstellen. QMap verwendet es, um seine Elemente sortiert zu halten, und nimmt an, dass zwei Schlüssel x und y gleich sind, wenn weder x < y noch y < x wahr ist.

Bei Überlastung operator<().