具有对象排序的无效比较器[重复]

Posted

技术标签:

【中文标题】具有对象排序的无效比较器[重复]【英文标题】:Invalid Comparator with object sorting [duplicate] 【发布时间】:2021-01-29 09:05:18 【问题描述】:

我已经重载了 std::greater_equal() 运算符,所以它按结构中的特定成员对我的对象进行排序。

bool operator >= (const Copys& c) const 
    return (relevence >= c.relevence);

(我做对了吗?)

而且每次都用 Invalid Comparator 打击我。它工作了一次,然后我再次运行它,它没有。 像这样调用排序:

std::sort(objs.begin(), objs.end(), std::greater_equal<Copys>());

我完全被难住了,任何帮助都会很棒。

【问题讨论】:

不应该operator&gt;=() 带两个参数来匹配std::greater_equal&lt;Copys&gt; 不,当我这样做时,它会说“此运算符函数的参数太多”。 参考文档另有说明:en.cppreference.com/w/cpp/algorithm/sort @πάνταῥεῖ — 如果它是成员函数,则不会。 @pete sure? 【参考方案1】:

std::sort 需要严格的弱排序,其中一个要求是compare(x, x) == false(没有元素在其自身之前排序)。这是不满意的,因为 std::greater_equal&lt;Copys&gt;()(x, x) == true 对于所有 x

你可能想要std::greater&lt;Copys&gt;()(还有一个operator&gt;

【讨论】:

是的,效果很好,谢谢!

以上是关于具有对象排序的无效比较器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

基于请求的不同属性和基于java中的请求的不同顺序排序(不是重复的)

基于对象属性对数组进行排序 - Javascript [重复]

快速排序中相等值的比较

比较器类在排序时抛出 ClassCastException [重复]

javscript巧用对象特性去掉数组重复项并排序

排序 LinkedList<MyClass> [重复]