Maison >développement back-end >C++ >Pourquoi ne puis-je pas trier une liste par ordre décroissant à l'aide de « std :: sort » et d'un comparateur personnalisé ?

Pourquoi ne puis-je pas trier une liste par ordre décroissant à l'aide de « std :: sort » et d'un comparateur personnalisé ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-20 16:53:28495parcourir

Why Can't I Sort a List in Descending Order Using `std::sort` and a Custom Comparator?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn