具有对象排序的无效比较器[重复]
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>=()
带两个参数来匹配std::greater_equal<Copys>
?
不,当我这样做时,它会说“此运算符函数的参数太多”。
参考文档另有说明:en.cppreference.com/w/cpp/algorithm/sort
@πάνταῥεῖ — 如果它是成员函数,则不会。
@pete sure?
【参考方案1】:
std::sort
需要严格的弱排序,其中一个要求是compare(x, x) == false
(没有元素在其自身之前排序)。这是不满意的,因为 std::greater_equal<Copys>()(x, x) == true
对于所有 x
。
你可能想要std::greater<Copys>()
(还有一个operator>
)
【讨论】:
是的,效果很好,谢谢!以上是关于具有对象排序的无效比较器[重复]的主要内容,如果未能解决你的问题,请参考以下文章
基于请求的不同属性和基于java中的请求的不同顺序排序(不是重复的)
基于对象属性对数组进行排序 - Javascript [重复]