Sort funktion vector überladen / abändern



  • Hallo,

    Ich hatte hier schon mal sehr tolle Hilfe bezüglich meiner STL Frage bekommen. Nun das Problem schein gelöst zu sein, jedoch weis ich leider immer noch nicht, wie ich die sort funktion/methode eines Vectors für eine eigene Klasse anwenden kann, die aus mehreren primitiven Datentypen besteht oder beipielsweise aus einer aus Assembler zusammengesetzten (typedef) 64 bit Zahl.

    Wie könnte ich die Sort funktion beibringen, nach was ich sortiert haben möchte -> oder kann ich nur primitive Datentypen sortieren (int char ... )

    thx



  • Das geht mittels eines Funktors.



  • Hier mal ein Beispiel; ist glaub' ich besser als jede Erklärung

    #include <vector>
    #include <algorithm>    // sort
    
    class MyClass
    {
    public:
        MyClass() : m_i(0), m_d(0) {}
        MyClass( int i, double d ) : m_i(i), m_d(d) {}
    
        int getI() const { return m_i; }
        double getD() const { return m_d; }
    private:
        int m_i;
        double m_d;
    };
    
    struct OrderI
    {
        bool operator()( const MyClass& a, const MyClass& b ) const
        {
            return a.getI() < b.getI();
        }
    };
    struct OrderD
    {
        bool operator()( const MyClass& a, const MyClass& b ) const
        {
            return a.getD() < b.getD();
        }
    };
    
    int main()
    {
        using namespace std;
        vector< MyClass > v;
        // v füllen
        sort( v.begin(), v.end(), OrderI() );
        // v ist jetzt nach m_i aufsteigend sortiert
        sort( v.begin(), v.end(), OrderD() );
        // v ist jetzt nach m_d aufsteigend sortiert
        return 0;
    }
    

    Gruß Werner :xmas2:



  • Vielen Dank Werner !!!!!!

    genau das was ich gesucht habe ....


Anmelden zum Antworten