Ich arbeite an einem System, wo ich in der Lage sein muss, einen Vektor nach einem gegebenen Prädikat zu sortieren, was meine Klassen nicht kontrollieren sollten. Im Grunde gebe ich ihnen eine abgeleitete Klasse und sie sortieren blind danach.Wie kann ich eine "Do-Nothing" -Sortierung definieren?
Als eine der "reizvollen Macken" ist eines der Sortiermuster die Reihenfolge des Eintritts. Hier ist, was ich bisher habe.
struct Strategy
{
virtual bool operator()(const Loan& lhs, const Loan& rhs) const = 0;
};
struct strategyA : public Strategy
{
bool operator()(const Loan& lhs, const Loan& rhs) const
{
return true;
}
};
struct strategyB : public Strategy
{
bool operator()(const Loan& lhs, const Loan& rhs) const
{
return lhs.getID() > rhs.getID();
}
};
struct strategyC : public Strategy
{
bool operator()(const Loan& lhs, const Loan& rhs) const
{
return lhs.getFee() > rhs.getFee();
}
};
Offensichtlich als strategyA reflexiv ist, kann sie nicht verwendet werden, und wenn ich es auf false gesetzt, es wird alles als gleich behandeln, und ich kann meine Daten zum Abschied küssen.
Also hier ist meine Frage. Gibt es eine Möglichkeit, eine Prädikatfunktion zum Sortieren eines Vektors zu definieren, die KEINESTS ändert?
Ich bin mir bewusst, dass die einfachste Lösung ist, eine Reihenfolge der Eintragsvariable zu der Loan-Klasse hinzufügen, oder Partner mit einer in einem Paar. Alternativ könnte ich einen Parameter mit dem Prädikat angeben, das dem Sortierer sagt, ob er es verwenden soll oder nicht.
Die "Strategie" sollte nicht von der Art der Implementierungsdetails abhängen. Man kann sich nicht auf "Strategie" verlassen, dass es mit einem stabilen Sortieralgorithmus verwendet wird. – Vlad
@Vlad: Sag mir nicht;) – Dario
nun, mein Kommentar war auf Topicstarter gerichtet. ;) – Vlad