vector< vector<CString> > sortieren mit STL
-
Hallo,
ich habe mir vorgenommen, die STL mal häufiger zu benutzen und nicht immer alles selber zu schreiben.
Ich habe also eine Datentabelle mit den Felder als CStrings.
Sagen wir mal, pro Zeile 5 Spalten.
Eine Zeile mit 5 Feldern wird also in jeweils ein vector<CString> gepackt.
Diese Zeilen werden dann wiederum in ein vector gepackt.Nun möchte ich diese Tabelle sortieren, und zwar, indem eine Spalte das Kriterium ist. (So wie man z.B. im Explorer ja auch sortieren kann nach Datum, Größe oder Namen).
Leider klappt das so nicht mit der <algoritm> Funktion "sort":
bool UDgreater (STRVECTOR elem1, STRVECTOR elem2 ) { return (strcmp(elem1[0],elem2[0]) < 0); // Das Problem sind die Indices } void do_sort() { sort(vc_vcstrFields.begin(),vc_vcstrFields.end(),UDgreater); }
Er sortiert, wie er soll, aber etwas wichtiges ist nicht machbar:
Ich kann der UDgreater Funktion keine weiteren Parameter übergeben,
wie kann ich ohne globale Variable die Spalte angeben.
Wichtig ist, das er trozdem die ganze Zeile verschiebt, und nicht nur das einzelne Feld.Ich bin nicht ganz sicher, welchen Weg ich bei der STL gehen soll.
Vielleicht doch lieber mit <map> ?
-
a) benutz doch einfach mehrere Sortier Methoden für die einzelnen Aufgaben. Ich sehe keinen Sinn darin, warum die UDgreater Funktion allgemein dienlich sein soll und du nicht einfach spezialisierte Funktionen nimmst (UDgreater_name, UDgreater_date etc.)
b) wenn du es wirklich nicht mit mehreren Funktionen machen willst, dann benutz doch einfach eine Klasse um die eine entsprechende UDgreater Funktion zu basteln, die dann eben als Member eine Variable hat, die bestimmt, wonach sortiert werden soll.
Nur die Lösung ist nicht sehr toll, da du dann bei jedem Sortier Vergleich noch eine Überprüfung wonach sortiert werden soll hast.