首页 >后端开发 >C++ >为什么我无法使用'std::sort”和自定义比较器对列表进行降序排序?

为什么我无法使用'std::sort”和自定义比较器对列表进行降序排序?

Patricia Arquette
Patricia Arquette原创
2024-11-20 16:53:28491浏览

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

使用 STL 排序函数对列表进行排序

当列表包含自定义结构体的对象时,按降序实现列表排序可能会很困难。但是,您遇到的问题“'__last - __first' 中的 'operator-' 不匹配”揭示了所选排序方法的更深层次问题。

提供的 SortDescending 结构正确定义了一个运算符来比较两个术语,但它是根据它们的功率来实现的,t2.pow

问题源于 std::sort 需要随机访问迭代器,而列表迭代器不提供。双向迭代器,如 std::list 中的迭代器,允许您在列表中移动,但它们缺乏执行直接访问或指针算术的必要功能。

要使用 STL 排序函数对列表进行随机排序访问迭代器必须可用。另一种方法是使用成员函数 std::list::sort。此函数接受比较器函数作为参数,使您能够定义自定义排序标准。

在您的情况下,以下代码将根据列表项的幂次对列表进行降序排序:

Result.poly.sort([](const term& t1, const term& t2) { return t1.pow > t2.pow; });

通过使用正确的迭代器和适当的排序函数,您可以按所需的顺序有效地对列表进行排序。

以上是为什么我无法使用'std::sort”和自定义比较器对列表进行降序排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn