Vektor sortieren



  • #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    class test
    {
        public:
        int Zahl;
        int Zahl2;
    };
    
    bool myfunction (int i,int j)
    {
        return (i<j);
    }
    
    int main()
    {
        test s;
        vector<test>myvector;
    
        for(int i=0;i<5;++i)
        {
        cin>>s.Zahl;
        cin>>s.Zahl2;
        myvector.push_back(s);
        }
    
        sort (myvector.begin(), myvector.end(),myfunction);
    
        cout << "myvector contains:"<<endl;
        vector<test>::iterator it;
        for (it=myvector.begin(); it!=myvector.end(); ++it)
        cout<<it->Zahl<<endl<<it->Zahl2<<endl;
    
        return 0;
    }
    

    Ich möchte gerne die Zahlen im Vektor sortieren lassen.
    Leider funktioniert die Sortierung aber nicht. Vermutlich liegt der Fehler darin, daß die Funktion in der jetzigen Form nicht damit klar kommt, daß im Vektor Objekte mit mehr als einer Eigenschaft(Zahl, Zahl2) gespeichert sind.



  • Richtig vermutet, sort übergibt Instanzen der Klasse an die Vergleichsfunktion, also müsste die Funktion etwa so aussehen:

    bool myfunction(const test& d1, const test& d2)
    {
      return d1.Zahl < d2.Zahl;
    }
    


  • Danke für den Tip.
    So in etwa müßte das funktionieren.
    Wenn ich "sort" richtig verstehe, kann die Vergleichsfunktion immer nur 2 Werte vergleichen.

    D.h. wenn es mehr werden müßte man dann wohl eine eigene Sortierfunktion
    schreiben.



  • sort() arbeitet, indem es jeweils zwei Elemente auswählt und miteinander vergleicht. Du mußt ihm nur eine Möglichkeit geben herauszufinden, welches von je zwei Elementen größer ist.


Anmelden zum Antworten