?
Du brauchst auf die eine oder andere Art und Weise ein Funktionsobjekt, dass zwei Dummies vergleicht. Die einfachste Methode wäre, den operator< zu überladen, den benutzt sort nämlich per default. Allerdings weiß ich nicht, ob sich das in diesem Fall wirklich sinnvoll machen lässt - die andere Methode wäre, ein Funktionsobjekt zu erstellen, dass den Vergleich übernimmt. Ich sehe dabei folgende Möglichkeiten (Dummy definiert wie bei dir):
1. operator< überladen
bool operator<(Dummy const &d, Dummy const &e) {
return d.get_state() == Dummy::good;
}
// ...
std::list<Dummy> tmp;
sort(tmp.begin(), tmp.end());
2. Funktionsobjekt explizit definieren:
bool compare_dummies(Dummy const &d, Dummy const &e) {
return d.get_state() == Dummy::good;
}
// ...
std::list<Dummy> tmp;
sort(tmp.begin(), tmp.end(), &compare_dummies);
3. Wenns mit pointern sein muss,
bool compare_dummy_ptrs(Dummy const *d, Dummy const *e) {
return d->get_state() == Dummy::good;
}
// ...
std::list<Dummy*> tmp;
sort(tmp.begin(), tmp.end(), &compare_dummy_ptrs);
Für ne boost::lambda-Lösung müsste ich grad nachkucken, das geht aber sicher auch.