Sto lavorando a un sistema in cui devo essere in grado di ordinare un vettore in base a un determinato predicato, su cui le mie classi non dovrebbero avere il controllo. Fondamentalmente, passo loro una classe derivata e loro ci ordinano ciecamente.Come definire un ordinamento "Do-Nothing"?
Come uno dei "deliziosi capricci", uno dei modelli di ordinamento è l'ordine di entrata. Ecco quello che ho ottenuto finora.
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();
}
};
Ovviamente, come strategyA è riflessiva, non può essere utilizzato, e se ho impostato su false, sarà trattare tutto come uguali e posso baciare il mio addio dati.
Quindi ecco la mia domanda. Esiste un modo per definire una funzione di predicato per l'ordinamento di un vettore che NON cambierà nulla?
Sono consapevole del fatto che probabilmente la soluzione più semplice è aggiungere un ordine di variabile di ingresso alla classe di prestito o associarlo a uno in coppia. In alternativa, potrei inserire un parametro nel predicato che dice al selezionatore se usarlo o meno.
La 'strategia' non dovrebbe dipendere dai dettagli dell'implementazione di ordinamento. Non si può fare affidamento su 'Strategy' che verrà usato con un algoritmo di ordinamento stabile. – Vlad
@Vlad: non dirmelo;) – Dario
beh, il mio commento era rivolto a topicstarter. ;) – Vlad