Christian Seiler: Vektorsortierung in C++

Beitrag lesen

Hallo Alex,

Allerdings soll die Sortierung von einem Parameter abhängig sein, den die std::sort aufrufende Funktion festlegt. Nun bräuchte ich sowas wie Lambda-Funktionen, um std::sort eine entsprechende Funktion mitzugeben. Das scheint's in C++ nicht standardmäßig zu geben. Alternativ kann ich vor dem Sortieren jedem Objekt diesen Parameter über eine seiner Membervariablen mitgeben. Das scheint mir allerdings etwas umständlich. Gibt's noch andere, bessere Lösungen?

Du kannst statt einer Funktion auch einen Funktor verwenden:

class MyCompare {  
  private:  
    int parameter;  
  public:  
    // Construktor & Copy-Construktor  
    MyCompare(int parameter) : parameter(parameter) {}  
    MyCompare(const MyCompare& o) : parameter(o.parameter) {}  
  
    // hiermit lassen sich objekte dieser klasse dann aufrufen  
    // d.h. sowas wie  
    //    MyCompare foo(23);  
    //    bool result = foo(o1, o2);  
    bool operator() (ObjektTyp i, ObjektTyp j) {  
      // gib etwas in abhängigkeit von i, j und parameter zurück  
    }  
}  
  
vector<ObjektTyp> v;  
// v füllen  
  
MyCompare compare(42); // mit parameter initialisieren  
sort(vec.begin(), vec.end(), compare);

Viele Grüße,
Christian