Tri des listes à l'aide de la fonction de tri STL
La mise en œuvre du tri de liste par ordre décroissant peut être difficile lorsque la liste contient des objets d'une structure personnalisée. Cependant, le problème que vous avez rencontré, "aucune correspondance pour 'operator-' dans '__last - __first'", révèle un problème plus profond avec l'approche de tri choisie.
La structure SortDescending fournie définit correctement un opérateur pour comparer deux termes, mais il le fait en fonction de leur puissance, t2.pow < t1.pow. Cette comparaison est cependant incompatible avec la fonction de tri standard.
Le problème vient du fait que std::sort nécessite des itérateurs à accès aléatoire, que les itérateurs de liste ne fournissent pas. Les itérateurs bidirectionnels, comme ceux de std::list, vous permettent de vous déplacer dans la liste, mais ils n'ont pas les capacités nécessaires pour effectuer un accès direct ou une arithmétique de pointeur.
Pour trier une liste à l'aide de la fonction de tri STL, aléatoire les itérateurs d’accès doivent être disponibles. Une approche alternative consiste à utiliser la fonction membre std::list::sort. Cette fonction accepte une fonction comparateur en argument, vous permettant de définir un critère de tri personnalisé.
Dans votre cas, le code suivant triera la liste par ordre décroissant en fonction de la puissance de ses termes :
Result.poly.sort([](const term& t1, const term& t2) { return t1.pow > t2.pow; });En utilisant les itérateurs corrects et la fonction de tri appropriée, vous pouvez trier efficacement votre liste dans l'ordre souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!