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