Trier la liste en utilisant la fonction de sorting STL

J’essaie de sortinger une liste (partie d’une classe) dans l’ordre décroissant contenant les éléments d’une struct , mais elle ne comstack pas:

erreur: pas de correspondance pour ‘operator-‘ dans ‘__last – __first’

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

Et voici SortDescending :

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

Quelqu’un peut-il me dire ce qui ne va pas?

L’algorithme standard std::sort nécessite des iterators à access aléatoire, std::list<>::iterator (les iterators de liste sont des iterators bidirectionnels).

Vous devriez utiliser la fonction membre std::list<>::sort .

std::list a une méthode de sort intégrée que vous devez utiliser car std::sort ne fonctionne qu’avec des iterators à access aléatoire, alors que std::list::iterator appartient simplement à la classe des iterators bidirectionnels.

 Result.poly.sort(SortDescending()); 

De plus, votre operator () devrait être marqué const .

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

Enfin, vous n'avez pas besoin d'écrire votre propre comparateur pour cela, utilisez simplement std::greater (situé dans l'en-tête standard ):

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

Il semble que les types d’iterators de Result.poly manquent operator - std::sort ne fonctionne pas avec std::list Result.poly.sort à Result.poly.sort