使用STL排序功能对列表进行排序

时间:2010-03-12 13:07:39

标签: c++ list stl sorting

我正在尝试按降序排序列表(类的一部分),其中包含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; 
    }
};

谁能告诉我什么是错的?

3 个答案:

答案 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