我正在尝试按降序排序列表(类的一部分),其中包含struct
的项目,但它不会编译:
错误:'__last - __first'中的'operator-'不匹配
sort(Result.poly.begin(), Result.poly.end(), SortDescending());
这里是SortDescending
:
struct SortDescending
{
bool operator()(const term& t1, const term& t2)
{
return t2.pow < t1.pow;
}
};
谁能告诉我什么是错的?
答案 0 :(得分:36)
标准算法std::sort
需要随机访问迭代器,std::list<>::iterator
不是(列表迭代器是双向迭代器)。
您应该使用std::list<>::sort
成员函数。
答案 1 :(得分:11)
std::list
有一个内置的sort
方法需要使用,因为std::sort
仅适用于随机访问迭代器,而std::list::iterator
仅属于双向迭代器类迭代器。
Result.poly.sort(SortDescending());
此外,您的operator ()
应标记为const
。
struct SortDescending
{
bool operator()(const term& t1, const term& t2) const
{
return t2.pow < t1.pow;
}
};
最后,您不需要为此编写自己的比较器,只需使用std::greater<T>
(位于标准标题<functional>
中):
Result.poly.sort(std::greater<term>());
答案 2 :(得分:4)
似乎Result.poly
的迭代器类型缺少operator -
。 std::sort
无效std::list
更改为Result.poly.sort