QMap<int, QString> sortieren

Alles rund um die Programmierung mit Qt
Antworten
GeorgGentoo
Beiträge: 6
Registriert: 13. Dezember 2004 23:09
Wohnort: DE / Karlsruhe

QMap<int, QString> sortieren

Beitrag von GeorgGentoo »

Hallo,

ich habe ein relativ einfaches problem:
ein QMap<int, QString> soll sortiert werden, und zwar in meinem Fall nach den Values (alphabetisch).

Wie ist das am einfachsten zu realisieren?

Danke.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

values().sort()
Locutus

Beitrag von Locutus »

Bei Qt4.x werden die Einträge automatisch sortiert, allerdings in aufsteigender Reihenfolge. Kann man das irgendwie ändern, so das alles absteigend sortiert wird?
Scheinbar geht das auch mit QSort nicht, kann jemand hefen?
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Doch, QSort macht das.
So in der Art -> qSort(list.begin(), list.end(), qGreater<int>());

Goos
Locutus

Beitrag von Locutus »

Vielen Dank für die Antworten, ich habe beim ersten Mal wohl nicht genau genug die Anleitung gelesen :roll:
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

die stl algorythmen (sort z.b.) gehen auch mit qt containern (ab 4.x) (mit qvector gehts zumindest ^^ aber ich nhem eh lieber die stl container)

aber selbst bei ner stl map und den stl algos glaub ich ned das man ne map sortiert bekommt ^^
Schau dir noch mal an was ne Map ist und ueberdenk entweder den wunsch ne map zu sortieren, oder die verwendung der map an sich als passenden container nochmal ^^

ansonsten, wenn du "Listen" hast die du bei bedarf "umsortieren" musst, kommst meist mit einem container nimmer aus. Meist nimmt man nen anspruchslosen container(list) der die eigentlichen daten haelt ... und dann ein oder mehrere container die referenzen (pointer) auf deine objecte halten und die dann beliebig sortieren kannst ....
musst halt nur aufpassen dass der container mit den wirklichen daten bis zum schluss lebt ^^

weiss ned ob es fuer den QString nen optimiertes swap gibt, aber nen std::list<std:string> container zu sortieren kann performancetechnisch schon ne katastrophe sein ^^

Ciao ...
tachyon
Beiträge: 29
Registriert: 22. Juli 2006 10:03

Beitrag von tachyon »

Wo liegt eigentlich der Vorteil darin, anstatt der STL-Container die Qt-Container zu benutzen? Der einzige Unterschied der mir aufgefallen ist, ist der, daß der Code kleiner wird.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Man kann viel abkuerzen ^^

QStringList anstatt std::list<std::string> ^^

Die QT widgets verwenden in ihren schnittstellen zum teil auch container ...

die actions() an nem widget zum beispiel, oder die diversen ModelImplementierungen da ...

wenn sowas zurueckbekommst, und nicht alles sofort in nen stl container kopieren willst (performance !!!) bist halt gezwungen mit den qt containern auch zu arbeiten ...

Qstringlist ist sicher auf Qstrings optimiert und verwendet bestimmt ne hochperformante swap funktion ....
so das ne qstringlist zu sortieren bestimmt um welten performanter wie nen sort auf ne std::list<std::string> aber wer macht das schon mit der stl ? ^^

fuer biblotheksentwickler gibts noch was .....
die STL gibts in mehreren impls die zueinander nicht binaercompatibel sind
sprich du hast ne schnittstelle zu ner dll wo ne stl referenz drin ist, (ala const std::string & rx ) deine exe und deine dlls sind zwar mit dem selben compiler uebersetzt, aber die exe zieht ne andere stl (include verzeichnisse !) an als die dll ... und rums !
die qt hat nur eine impl, und sobald die compiler stimmen hat man keine probs ....

ciao ...
Locutus

Beitrag von Locutus »

RHBaum hat geschrieben:Schau dir noch mal an was ne Map ist und ueberdenk entweder den wunsch ne map zu sortieren, oder die verwendung der map an sich als passenden container nochmal ^^
Danke für deine Antwort. Ich habe mittlerweile das Problem so gelöst. Der Inhalt einer Map wird automatisch sortiert und anstatt selbst noch einmal zu sortieren, loope ich den Inhalt von hinten nach vorne durch.
Damit kann ich gut arbeiten. Ich verwalte mit der Map übrigens Dateien samt ihrer Größe.
Antworten