Vektor aus Structs sortieren ?? please help???????



  • brauch dringend hilfe wie sortier ich auf die schnelle den vector aus structs nach blub??
    hab mir da was vorgestellt aus ?? das müsste doch in wenigen Zeilen gehen????
    #include <algorithm>
    #include <functional>

    struct FOO {
    int blub;
    int bla;
    };
    vector <FOO> m_foo;

    big thx



  • std::sort, kannst ja deinen eigenen Funktor für den Vergleich übergeben, wenn es keinen Sinn macht einen eigenen operator< für die Klasse anzulegen.

    btw.
    uff, ich mag keine großgeschriebenen Klassen/Strukturnamen 🙂



  • mm ich kenn mich da nicht so gut aus kann mir da jemand bei der implementierung schnell mal helfen?



  • Hallo,

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    struct FOO {
            int blub;
            int bla;
    
    };
    
    void ausgabe(vector<FOO>& obj)
    {
            for(vector<FOO>::iterator it = obj.begin(); it != obj.end() ;it++)
            {
                    cout << it->blub << endl;
            //      cout << it->bla << endl;
    
            }
            cout << "______________" << endl;
    }
    
    bool cmp(const FOO& a, const FOO& b)
    {
            return a.blub > b.blub;
    }
    
    int main()
    {
            vector<FOO> vec_foo;
            FOO foo;
    
            foo.blub = 120;
            vec_foo.push_back(foo);
    
            foo.blub = 20;
            vec_foo.push_back(foo);
    
            foo.blub = 30;
            vec_foo.push_back(foo);
    
            foo.blub = 880;
            vec_foo.push_back(foo);
    
            // Unsortierte Ausgabe...
            ausgabe(vec_foo);
            sort(vec_foo.begin(), vec_foo.end(), cmp);
    
            // Sortierte Ausgabe...
            ausgabe(vec_foo);
    }
    

    Das sollte dir eigentlich helfen.



  • schaut das mit klassen irgendwie anderst aus bei mir kommt kompilerfehler??

    bool Bla::Cmp(){
    foo.distance > foo.distance; -> ist kein Element von Vektor??
    };

    sort(foo.begin(), foo.end(), Cmp);



  • Also bei CarstenJ ist cmp keine Methode von FOO !

    d.h. Cmp darf auch keine Methode von Bla sein!

    ->

    bool Cmp(const Bla& lhs, const Bla& rhs);
    
    class Bla
    {
      friend bool Cmp(const Bla& lhs, const Bla& rhs);
      public: //...
    }
    
    bool Cmp(const Bla& lhs, const Bla& rhs)
    {
      return (lhs.distance < rhs.distance);
    }
    


  • ?? jo also der vector ist bei mir private und sollte auch so bleiben? irgendwie ist das alles komisch ??

    hab eine klasse

    struct bla{
    int m;
    int n;
    }
    
    class Foo{
    private: vecttor<bla> blub;
    public:
    --> hier sollt sortierern rein
    };
    
    also 
    Foo:Sort() {
    irgendwie implementen dass es funzt
    
    }
    


  • Nabend,

    ich weiss ja nicht, nach was du sortieren willst, aber so koenntest du es bspw.
    machen:

    struct BlaCmp {
        bool operator()(const bla& x, const bla& y) {
            return (x.m < y.m) && (x.n < y.n);
        }
    };
    
    class Foo {
        private: 
            std::vector<bla> blub;
        public:
            void sort() {
                BlaCmp bc;
                std::sort(blub.begin(), blub.end(), bc);
            }
    };
    

    mfg
    v R



  • Hallo,

    Downset schrieb:

    ?? jo also der vector ist bei mir private und sollte auch so bleiben? irgendwie ist das alles komisch ??

    hab eine klasse

    struct bla{
    int m;
    int n;
    }
    
    class Foo{
    private: vecttor<bla> blub;
    public:
    --> hier sollt sortierern rein
    };
    
    also 
    Foo:Sort() {
    irgendwie implementen dass es funzt
    
    }
    

    Dann musst du das auch so sagen. Dein Ursprungspost sieht anders aus, da ist von Klassen nicht ansatzweise die Rede.


Anmelden zum Antworten