Seite 1 von 1

QList

Verfasst: 24. Februar 2009 10:00
von madugi
Hallo, gibt es eine einfache Möglichkeit aus einer QList alle doppelten Einträge zu entfernen?

Verfasst: 24. Februar 2009 10:48
von solarix
Nur so eine Idee:

Code: Alles auswählen

 list = list.toSet().toList();
wuerde vermutlich gehen, ist aber recht speicherintensiv...

Verfasst: 24. Februar 2009 10:50
von nkc
1. Anzahl deiner Einträge ermitteln.
2. for-Schleife, die bis zu der Anzahl deiner Einträge läuft und das den aktuellen Eintrag mit allen anderen Einträgen vergleicht.
3. Wenn eins davon gleich deinem aktuellen Eintrag ist, löschen.

Verfasst: 24. Februar 2009 12:09
von franzf
Du könntest auch vor dem Einfügen überprüfen, ob das Item schon drinnen ist.
Und wenn du Pointer in der Liste hast, kannst du dir überlegen, ob nur die fliegen, die auf die gleiche Adresse zeigen, oder auch die, bei denen das Objekt hinter dem Zeiger identisch ist (operator==(*current, *other)==true).

Bei Objekten (also keine Zeiger) musst du dir überlegen, ob du dann auch den operator== überladen musst.

Grüße
Franz

Verfasst: 24. Februar 2009 12:12
von franzf
nkc hat geschrieben:2. for-Schleife, die bis zu der Anzahl deiner Einträge läuft und das den aktuellen Eintrag mit allen anderen Einträgen vergleicht.
Es reicht, wenn du von dem aktuellen Eintrag aus nur die Folgenden vergleichst, und die erste Schleife bei dem Vorletzten aufhörst, um es dann in der inneren Schleife mit dem letzten zu vergleichen (bei vielen Einträgen deutlicher Geschwindgkeitsvorteil).

Verfasst: 24. Februar 2009 13:04
von VuuRWerK
Gleich ein QSet nehmen, wenn Du keinen Einfluss darauf hast dann so: QSet#fromList(QList)

Gut Schuß
VuuRWerK ;)

Verfasst: 24. Februar 2009 13:10
von The User
Sorry, STL unique macht nicht das Gewünschte.
Wenn die Liste sehr groß ist, schreib die schon vorgekommenen in ein Hash-Set wie QSet, ansonsten sollte ein einfaches std::set besser sein.

Verfasst: 24. Februar 2009 14:14
von madugi
Danke an Alle!!!

Die Lösung mit QSet hat das Rennen gewonnen.