Vector inhalt sortieren



  • bool less_name(const XXX& a, const XXX& b)
    {
        return a.name < b.name;
    }
    
    /* ... */
    std::sort(list.begin(), list.end(), less_name);
    

    in sort was soll ich übergeben bei aufruf less_name.
    less_name ist ein Funktionsname oder!



  • error C2065: 'a': nichtdeklarierter Bezeichner
    error C2065: 'b': nichtdeklarierter Bezeichner



  • Dann machst Du es falsch.

    (Sorry, aber weniger informativ ging wohl wirklich nicht 😉 )

    EDIT: ja, "less_name" ist der Name der Funktion.



  • #include <vector>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct XXX
    {
        string lastname;
        int age;
        XXX(string l, int a) : lastname(l), age(a){}
    };
    bool operator<(const XXX& X1, const XXX& X2)
    {
        return X1.lastname < X2.lastname;
    }
    
    int main()
    {
        vector <XXX> List;
        List.push_back(XXX("Bernie", 15));
        List.push_back(XXX("Cernie", 11));
        List.push_back(XXX("Aernie", 17));
        List.push_back(XXX("Dernie", 19));
    
        sort (List.begin(), List.end());
        for(vector<XXX>::iterator i = List.begin(); i != List.end(); ++i)
            cout << i->lastname << " ist " << i->age << endl;
    }
    


  • Ok, operator< ist einfacher als less_name, das gebe ich zu 😉

    @dokdok: Wenn das Beispiel von KPC so bei Dir funzt, müsstest Du auch herausfinden warum das mit less_name nicht ging, das ist nämlich bis auf den Namen "less_name" (und dessen Angabe hinten bei sort(...)) völlig identisch.



  • Ja es hat geklappt mit Operator danke.
    mit less_name aber nicht. der debbger wirft mich in algorithm classe



  • dokdok schrieb:

    mit less_name aber nicht. der debbger wirft mich in algorithm classe

    Randfrage: Was für eine Fehlermeldung?



  • Folgendes funktioniert bei mir ebenfalls:

    bool compare(const XXX& X1, const XXX& X2)
    {
        return X1.lastname < X2.lastname;
    }
    
    //...
    sort (List.begin(), List.end(),compare);
    

    Der restliche Code wie eben!

    KaPtainCugel



  • müssen unbedingt vector sein?
    List ist effektiver falls es sich um insert, sortierung geht



  • netrobot schrieb:

    müssen unbedingt vector sein?

    Muß nicht - sort() arbeitet mit allem zusammen, was einen Random-Access-Iterator bereitstellt (vector, deque, C-Style Arrays).

    List ist effektiver falls es sich um insert, sortierung geht

    list hat keine Random-Access-Iteratoren, da funktioniert sort() nicht - aber list hat eine Memberfunktion, die das ersetzt.

    (PS: Du könntest auch ein set verwenden, da brauchst du nicht mehr zu sortieren ;))



  • CStoll schrieb
    Was

    für eine Fehlermeldung?
    

    error C2065: 'a': nichtdeklarierter Bezeichner
    error C2065: 'b': nichtdeklarierter Bezeichner



  • dokdok schrieb:

    error C2065: 'a': nichtdeklarierter Bezeichner
    error C2065: 'b': nichtdeklarierter Bezeichner

    Stimmen denn die Parameternamen der Funktion less_name mit den Bezeichnern überein, die in der Funktion verwendet wurden?



  • Und Du bist die sicher, dass Du an dem Code den ich gepostet habe nichts verändert hast, ja? 😉



  • Also Fehlalarm.
    ich ziehe meine reklamme zurück.
    ihe habt recht.
    ich habe was falsch gemacht aber leider habe übersehen . kann ich nicht feststellen was.
    habe es wiederholt und es ging

    danke


Anmelden zum Antworten