8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

moca 1月前

12 0

我正在尝试按降序对包含结构项的列表(类的一部分)进行排序,但无法编译:错误:'__last - __first' 排序中'operator-'没有匹配项(Result.poly.begi...

我正在尝试按降序对包含 a 项的列表(类的一部分)进行排序 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; 
    }
};

谁能告诉我出了什么问题?

帖子版权声明 1、本帖标题:使用 STL 排序函数对列表进行排序
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由moca在本站《sorting》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 标准算法 std::sort 需要随机访问迭代器,而 std::list<>::iterator s 不需要(列表迭代器是双向迭代器)。

    您应该使用 std::list<>::sort 成员函数。

  • Veky 1月前 0 只看Ta
    引用 3

    @Vlad,您不需要重载任何东西。Result.poly.sort(SortDescending()); 应该可以正常工作。

  • 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; 
        }
    };
    

    最后,如果类型 term 重载了适当的 operator> ,您可能不需要编写自己的比较器进行排序 - 只需使用 std::greater<T> (位于标准标题中 <functional> ):

    Result.poly.sort(std::greater<term>());
    
  • 不,不是这样的,标准中没有任何内容表明这需要是 const。如果您查看错误消息,似乎输入迭代器缺少运算符 -`。

  • @Andreas:我担心的是临时对象被传递到排序函数中。我忘记了比较器是通过值传递的,而由于临时对象不能绑定到非常量引用,因此这要求函数是常量。

  • @Vlad:什么错误?此代码应该可以工作。您是否包含了标头对于 std::greater?

  • std::greater 仅在 operator> 对 term 重载时才起作用,但这里可能并非如此。

  • 似乎 Result.poly 缺少的 operator - . std::sort 无法与 std::list 更改为 Result.poly.sort

  • @Vlad 你可以通过 Result.poly.sort(SortDescending()) 来调用它,不需要运算符 <。

  • 引用 11

    @Konrad 我认为他在谈论运算符<而忽略了 std::ist::sort 有一个采用谓词的版本这一事实。

返回
作者最近主题: