sort macht nicht, was es soll
-
Hi,
ich wende gerade die sort-Funktion der STL an, aber leider klappt es nicht so, wie ich mir das vorstelle. Und zwar möchte ich einen Vektor sortieren, der aus Variablen vom Typ std::pair<int,int> besteht. Wenn ich jetzt schreibe:
std::sort(MyVector.begin(),MyVector.end());
dann sind am Ende die Werte für first der Größe nach geordnet und die der second-Werte auch. Also in etwa so:
123 3
123 4
123 5
124 4
124 5
124 6
125 5 ....Wenn ich jetzt aber nach den second-Werten sortieren möchte, dann muss ich ja meine eigene Funktion schreiben, die ich dem Sortieralgorithmus übergebe. Das habe ich wie folgt gemacht:
std::sort(MyVector.begin(),MyVector.end(),SortValY); //... bool SortValY (MyPairInt &a, MyPairInt &b) { return a.second < b.second; }
Aber leider funktioniert das nicht. Die second-Werte sind der Reihenfolge nach geordnet, aber die first-Werte nicht. Ergebnis sieht wie folgt aus:
124 3
125 4
124 4
126 4
124 5
126 5
125 5 ....Wie muss ich meine SortValY-Funktion ändern, dass die first-Werte auch geordnet werden?
DANKE!
V.K.
-
VerbalKint schrieb:
std::sort(MyVector.begin(),MyVector.end(),SortValY); //... bool SortValY (MyPairInt &a, MyPairInt &b) { return a.second < b.second; }
meine idee:
zuerst überprüfen ob die second-werte gleich sind
wenn ja: die erste spalte berücksichtigen
-
Du musst eben eine Bedingung schreiben, die zuerst nach
second
und anschliessend nachfirst
ordnet. Zum Beispiel so:bool SortSecond(const MyPairInt& Left, const MyPairInt& Right) // Const-Referenzen! { if (Left.second == Right.second) return Left.first < Right.first; else return Left.second < Right.second; }
-
Hat funktioniert, vielen Dank!