Vektorsortierung in C++
Alex
- programmiertechnik
0 Christian Seiler0 Alex
Hallo,
ich möchte in C++ einen Vektor von Objekten nach einer der Membervariablen dieser Objekte sortieren. Das ist an sich kein Problem, wenn ich eine Vergleichsfunktion als dritten Parameter für std::sort mitgebe oder den Operator < dieser Objekte überlade.
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?
Grüße.
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
Hi Christian,
Du kannst statt einer Funktion auch einen Funktor verwenden:
Sieht gut aus. Dankeschön.