Ordina la lista usando la funzione di ordinamento STL

Sto cercando di ordinare una lista (parte di una class) in ordine decrescente contenente gli elementi di una struct , ma non la compila:

errore: nessuna corrispondenza per ‘operator-‘ in ‘__last – __prima’

 sort(Result.poly.begin(), Result.poly.end(), SortDescending()); 

Ed ecco SortDescending :

 struct SortDescending { bool operator()(const term& t1, const term& t2) { return t2.pow < t1.pow; } }; 

Qualcuno può dirmi cosa c’è che non va?

L’algoritmo standard std::sort richiede iteratori di accesso casuale, che std::list<>::iterator non lo sono (gli iteratori di elenchi sono iteratori bidirezionali).

Dovresti usare la funzione membro std::list<>::sort .

std::list ha un metodo di sort incorporato che è necessario utilizzare poiché std::sort funziona solo con iteratori ad accesso casuale, mentre std::list::iterator appartiene semplicemente alla class iteratore bidirezionale degli iteratori.

 Result.poly.sort(SortDescending()); 

Inoltre, il tuo operator () dovrebbe essere contrassegnato come const .

 struct SortDescending { bool operator()(const term& t1, const term& t2) const { return t2.pow < t1.pow; } }; 

Infine, non è necessario scrivere il proprio comparatore per questo, semplicemente usa std::greater (che si trova nell'intestazione standard ):

 Result.poly.sort(std::greater()); 

Sembra che i tipi di iteratore per Result.poly mancano operator - . std::sort non funziona con std::list change in Result.poly.sort