Vector mit Objekten sortieren



  • Hallo,
    ich versuche einen Vector welcher mit Objekten gefüllt ist, nach einem String Attribut"Firmenname" welches darin enthalten ist alphabetisch zu sortieren.

    Dazu habe ich mir überlegt den Operator ">" zu überladen.

    Es gibt 2 Klassen "Kennzahlen" und "Firma", der Vector um den es sich handelt, befindet sich in der Firma und beinhaltet die Kennzahlenobjekte. Also: "vector<Kennzahlen> vKennzahlen".

    1. Frage: Wie würde eine sinnvolle Überladung des Operators ">" aussehen und ist es egal ob ich diesen in der cpp von "Firma" oder "Kennzahlen" schreibe?

    2. Frage: Könnte mir jemand ein Beispiel, bzw. passend zu meinem Problem einen Code schicken oder generieren? Ich dachte an eine Sort funktion mit dem einfachen Befehl sort(vec.begin(),vec.end(), ???irgendwie nach Kennzahlen???).

    Sitze da nun seit ewigkeiten, daher würde mir ein Code mehr als tausend Worte helfen.
    Vielen Dank im Vorraus



  • Du müsstest operator< überladen. Da du aber nur eine Sortierreihenfolge angeben möchtest, wäre es besser, dies direkt beim Sortieren zu tun. Dafür bietet sich ein Lambdaausdruck an (ab C++11, sonst geht auch eine einfache Funktion).

    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    int main()
    {
            struct E { int a; int b; };
            std::vector<E> v = { {1,2}, {2,1} };
    
            std::sort(begin(v),end(v), [](const E& l, const E& r ) {
                    return l.b < r.b;
            });
    
            for( const auto& e : v ) {
                    std::cout << "a " << e.a << " b " << e.b << "\n";
            }
    }
    


  • Vielen Dank schonmal,
    ich schaue nun mal wie weit ich komme!
    🙂


Log in to reply