Sortieren eines Vektors
-
Hallo zusammen.
Ich habe ein Problem beim Sortieren innerhalb einer Struktur. Die Struktur enthält 3 Fehler mit je einem Vektor der Länge n:
#include <algorithm> #include <vector> //-------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { struct{vector<int> saving, von, nach;} savliste; //Berechnungen.................................. savliste.saving.resize(10); savliste.von.resize(10); savliste.nach.resize(10); //Es erfolgen Einträge in die Vektoren.......... }Danach soll der Vektor "savliste.saving" absteigend sortiert werden. Das Problem ist nun, dass die korrespondierenden Einträge von "savliste.von" und "savliste.nach" nach der Sortieren wieder entsprechend zum richtigen "savliste.saving" Wert stehen müssen.
Beispiel:
Vor der Sortierung savliste.saving savliste.von savliste.nach 7 1 20 9 2 10 11 3 4 2 5 6 Nach der Sortierung muss es so aussehen: savliste.saving savliste.von savliste.nach 2 5 6 7 1 20 9 2 10 11 3 4Die Werte "von" und "nach" müssen also entsprechend mitziehen.
Wie und welche Funktion kann ich dazu nutzen?
Vielen Dank und Liebe Grüße
-
Nimm doch einfach EINEN Vector von einer Struct. Dann sortiert das automatisch richtig mit.
-
Das wäre eine gute Idee.
Leider weiß ich nicht wie ich einen Solchen Vektor einer Stuktur definieren kann.
-
Du hast einmal deine struct bzw. public class
struct savliste { int sav_saving,sav_von,sav_nach; savliste(int saving,int von,int nach):sav_saving(saving),sav_von(von),sav_nach(nach){} };und dann packst du diese struct in einen vector
vector <savliste> liste; liste.push_back(savliste(7,1,20));
-
Hallo,
danke für deine Antwort.
Leider bekomme ich bei der Definition des Vektors, die Fehlermeldung: "Template argument cannot have static or local linkage".
Habe es so eingefügt, wie du es vorgeschlagen hast.
-
Die struct gehört nicht in eine Ereignisbehandlung.
-
Danke.
Ich hatte wirklich die Definition der Struktur innerhalb einer Ereignisbehandlung. Habe Sie jetzt in die Header Datei geschrieben.
Was mir aber noch nicht klar ist, wie ich das ganze jetzt mit einem Sortieralgorithmus wie "sort" oder "sort_heap" behandel.
Und das ganze ja so, dass nur nach dem ersten Eintrag "saving" absteigend sortiert wird und die Einträge "von" und "nach" an die entsprechenden Positionen mitziehen.
-
Erstmal deine Vergleichsfunktion. Sowas in der Art:
bool MyComp(const savliste &l,const savliste &r) { return l.sav_saving < r.sav_saving; }und dann kannst du den vector mit
sort(vec.begin(),vec.end(), MyComp);sortieren.
-
Tausend Dank.
Hätte es ohne die Hilfe sicherlich nicht hinbekommen.
Funktioniert einwandfrei. Super Hilfe...
Liebe Grüße
-
Also im Header:
static bool MyComp(const savliste &l,const savliste &r);bool MyComp(const savliste &l,const savliste &r) { return l.sav_saving < r.sav_saving; }Ansonstren gibt's ordentlich Compiler-Meldungen von der STL!

-
Deswegen würde ich die Funktion ja auch nicht in den Header packen.
Alternativ könnte man sich ja auch einfach einen operator< schreiben, dann kann man wieder das normale sort verwenden.bool operator<(const savliste &l, const savliste &r) { return l.sav_saving < r.sav_saving; } // irgendwann später dann sort(vec.begin(),vec.end());