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 nach first 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!


Log in to reply