Wie sortiere ich einen List Container der den Datentyp Struct hat?
-
Missverständnis ?
Ich will nicht das Struct sortieren, ich will den Container sortieren. Dabei möchte ich, wenns geht, den Container nach x1 oder x2 sortieren.
Bei der Fehlerausgabe bekomme ich ... no match for 'operator<' in ... liegt da der Fehler? Wie muss ich den < operator im Struct einbauen?
-
madking75 schrieb:
Wie muss ich den < operator im Struct einbauen?
Z.B. so:
bool operator<(const strtest& s1, const strtest& s2) { return s1.x2 < s2.x2; }
-
Ich möchte aber gerne die Funktion sort() im List-Container verwenden.
-
Ähäm, es hat funktioniert! Danke!
Ich versteh nur nicht, warum er operator< automatisch aufruft.
-
Falls nicht anders angegeben wird operator< zum Sortieren benutzt.
void sort(); // benutzt operator<
void sort( Comp compfunction ); // benutzt compfuntion
-
Hab doch noch ein Problem, es gibt zwar keine Fehlermeldung, aber:
bool operator<(const strtest& s1, const strtest& s2) { return s1.x2 < s2.x2; }
Beläßt die Reihenfolge wie sie ist und:
bool operator<(const strtest& s1, const strtest& s2) { return s1.x2 > s2.x2; }
Dreht die Reihenfolge nur um.
-
Hmm, ich verstehe das Problem noch nicht ganz ...
Bei return s1.x2 > s2.x2 kommt ja auch die umgekehrte Reihenfolge raus?!?
-
Ach ich bin ein DEPP! Die erzeugte Liste hat ja schon ne Reihenfolge....
SORRY !!!
-
Es wird nach Größe von x2 sortiert.
Poste doch einfach mal die Ausgabe deines Programms und beschreibe etwas genauer, was nicht stimmt.
-
Jetzt stimmt alles, das Programm arbeitet perfekt. Hier nochmal der richtige Code.
#include <iostream> #include <list> #include <algorithm> using namespace std; struct strtest { int x1; int x2; }; list<strtest> daten; bool operator<(const strtest& s1, const strtest& s2) { return s1.x1 < s2.x1; } int main() { list<strtest>::iterator iter; strtest test; for(int i=0;i<=10;i++) { test.x1=((rand()%10)-5); test.x2=((rand()%10)-5); daten.push_back(test); } for(iter=daten.begin();iter!=daten.end();iter++) { cout << iter->x1 << ":" << iter->x2 << " | " ; } cout << endl; daten.sort(); for(iter=daten.begin();iter!=daten.end();iter++) { cout << iter->x1 << ":" << iter->x2 << " | " ; } cout << endl; return 0; }