vector nach Bewertungen sortieren?



  • Hallo,

    wie kann ich mit C++ elegant (!) einen vector<T> so sortieren, dass die Elemente nach "int Bewertung(T t)" sortiert sind? Also jedem T t wird eine Integer-Bewertung zugeordnet, nach der die Elemente im vector<T> sortiert werden sollen.

    Danke im Voraus!



  • Nachtrag: Was die Sachw verkompliziertz ist, dass die Bewertungsfunktion von gewissen Variablen abhängt. Also kann ich wohl nicht std::sort verwenden.



  • Warum solltest du kein std::sort verwenden können?

    struct sort_helper {
      sort_helper(foo_t const &var) : var(var) { } // var eben als Beispiel für eine "abhängige Variable"
    
      template<typename T>
      bool operator()(T const &lhs, T const &rhs) const {
        return Bewertung(lhs, var) < Bewertung(rhs, var);
      }
    
    private:
      foo_t const &var;
    };
    
    int main() {
      std::sort(begin, end, sort_helper(abhaengige_variable));
    }
    


  • Danke, sowas wie sort_helper hab ich gesucht!



  • Wieso geht sort denn nicht?

    int myCompare(Elem& a, Elem& b)
    {
    return a.berechneZahl() - b.berechneZahl();
    }
    
    sort(vec.begin(), vec.end(), myCompare);
    

    ?



  • Will sort jetzt eigentlich einen Funcptr, einen Functor oder geht beides? Im Forum hier schreiben immer alle mit Functoren, aber die Referenz hier nutzt bei den Beispielcodes immer Funktionen. Sind Functoren besser aus irgendeinem Grund?



  • Gadusch schrieb:

    Will sort jetzt eigentlich einen Funcptr, einen Functor oder geht beides? Im Forum hier schreiben immer alle mit Functoren, aber die Referenz hier nutzt bei den Beispielcodes immer Funktionen. Sind Functoren besser aus irgendeinem Grund?

    Es will einfach irgend was, dass es als Funktion aufrufen kann. Ob es nun eine Funktion, ein Functor oder ein Funktionspointer ist, ist da völlig egal. Der Nachteil von Funktionspointern ist aber, dass die möglicherweise nicht geinlined werden.


Anmelden zum Antworten