nach verschiedenen Eigenschaften sortieren mit sort-Funktion



  • Hallo,

    ich wollte fragen ob es eine Möglichkeit gibt, die sort Funktion irgendwie mit zwei verschiedenen Definitionen von "<" zu nutzen.
    Also im Klartext, ich habe ein Array von Objekten, dass ich gerne einmal nach einer Eigenschaft, und dann ein anderes Mal nach einer anderen Eigenschaft sortieren würde.

    Kann man das irgendwie mit der fertigen sort Funktion realisieren oder muß man das selber bauen? Und vor allem wie ?

    Schonmal vielen Dank,
    lg,
    Chrissi



  • welche sort funktion?
    wenn du dir eine eigene schreibst, dann kannst du das doch eh selbst bestimmen.
    was für arrays benutzt du? stl vektoren oder normale c arrays?



  • Du kannst der sort-Funktion als drittes Argument die Funktion übergeben, mit der sortiert werden soll.

    template <class RandomAccessIterator, class StrictWeakOrdering>
    void sort(RandomAccessIterator first, RandomAccessIterator last,
              StrictWeakOrdering comp);
    

    StrictWeakOrdering

    Die Sortierfunktion sollte folgende Signatur besitzen:

    bool compare(const TYP& lhs, const TYP& rhs);
    


  • ah, danke sowas habe ich gesucht!

    wie muss ich denn dann meine compare funktion implementieren?
    ich habs mal so gemacht:

    bool Box::compDim(const Box& a, const Box& b)
    {
        return a.maxDim() < b.maxDim();
    }
    
    bool Box::compVol(const Box& a, const Box& b)
    {
        return a.Volume < b.Volume;
    }
    

    wenn ich jetzt sort aufrufe:

    sort(boxList, boxList+allCtr, compVol());
    

    will er bei compVol natürlich irgendwelche Argumente, aber die soll er sich ja selber suchen. Wie kann ich das machen ?



  • erstens sollte die Vergleichsfunktion statisch oder gleich ausserhalb jeder Klasse deklariert sein, zweitens solltest du die Klammern weglassen

    sort(boxList, boxList + allCtr, compVol);
    


  • ah, wunderbar hat geklappt.. danke!


Anmelden zum Antworten