QSet<double> aus QList<double>

Alles rund um die Programmierung mit Qt
Antworten
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

QSet<double> aus QList<double>

Beitrag 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?
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: QSet<double> aus QList<double>

Beitrag 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. ;-)
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

Re: QSet<double> aus QList<double>

Beitrag 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?
Antworten