Seite 1 von 1

QSet<double> aus QList<double>

Verfasst: 19. Oktober 2018 13:30
von bobcat
Ich möchte eine QList<double> in einen QSet<double> überführen (Qt 4.8.6). Das scheint mit double ein Problem zu sein. Mit einem anderen Datentyp (z.B. QString) klappt's. Hier mein Code:

Code: Alles auswählen

QList<double> myList = QList<double>() << 1.0 << 1.0 << 1.0 << 2.0;
QSet<double> mySet = QSet<double>::fromList(myList);
Andere, leicht veränderte Versuche, z.B. mit QSet::insert oder QList::toSet scheitern auch. Der Compiler meint, dass es daran liegt, dass qHash(...) keine Überladung für den Typ double hat. Ich verstehe allerdings nicht, was ich da machen kann.
Meine Frage: Kann ich QSet über doubles prinzipiell nicht verwenden? Oder, falls doch, wie?

Re: QSet<double> aus QList<double>

Verfasst: 19. Oktober 2018 15:44
von hilefoks
Qt bietet einfach keine qHash() Funktion für double. Der Grund dafür ist, dass es im Allgemeinen eine schlechte Idee ist, Gleitkommazahlen als Schlüssel in einem Hash zu verwenden (QSet basiert intern auf QHash). Und zwar aus dem gleichen Grund, warum man keine Doppelwerte mit == vergleichen sollten. ;-)

Re: QSet<double> aus QList<double>

Verfasst: 19. Oktober 2018 16:27
von bobcat
Hm, okay, verstehe ich. Das bedeutet dann genaugenommen, dass es auch keine gute Idee ist, auf einer QList<double> die Methode QList::contains(...) aufzurufen, da diese intern laut Doku auch auf operator==() zurückgreift. Oder ist Qt hier so schlau, für den Vergleich in einer QList<double> das qFuzzyCompare(...) zu benutzen? Wäre hier ja angebracht! Muss ich das contains auf einer QList<double> selbst mit qFuzzyCompare(...) implementieren?