theStorx ha scritto:
grazie shodan,
ma quindi se devo ordinare in modo decrescente, devo usare una funzione di comparazione come decritto qui?
Si, perché la versione "normale" di sort utilizza < per la comparazione.
questa immagino che vada messa nella classe dove ho la struct?
No. Ora che CqiFeedback è indipendente, tutto quello che la riguarda deve essere indipendente.
e le funzioni inline che ho definito prima le devo usare ancora o le posso eliminare, se uso la funzione comp?
No. Semmai vanno integrate. La funzione comp si limiterà a usare le tue funzioni.
Tra l'altro è preferibile usare un function object invece di una funzione perché la chiamata avverrà inline.
struct CqiFeedback
{
/** the sub channel */
int m_subChannelId;
/** the cqi feedback */
int m_cqi;
};
// seguono criteri per la comparazione.
// <, <=, >, >=, ==, !=
inline bool operator < (const CqiFeedback& a, const CqiFeedback& b) {
// criterio per definire a < b
}
// etc...
// function object per la comparazione per std::sort
struct compare {
bool operator(const CqiFeedback& a, const CqiFeedback& b) {
return a < b;
// return a > b;
}
}
...
// crea un oggetto temporaneo di tipo compare per operare sull'insieme del vector.
std::sort(vec.begin(),vec.end(), compare());
Questo in teoria.
In pratica, dato l'uso frequente di function object per la comparazione tra elementi, la libreria standard provvede già a fornire dei function objects già pronti.
http://www.cplusplus.com/reference/std/functional
(greater nel tuo caso).
// crea un oggetto temporaneo di tipo greater<CqiFeedback> per operare sull'insieme del vector.
std::sort(vec.begin(),vec.end(), greater<CqiFeedback>() );
Ma gli operatori di confronto su CqiFeedback li creare tu.