为什么is_sorted与greater_equal无法正常工作?

时间:2017-04-29 13:53:58

标签: c++ stl

我有C ++代码:

enum network

为什么第二个失败?

2 个答案:

答案 0 :(得分:2)

is_sorted对比较函数对象有要求。特别是,它必须满足Compare概念的要求。对于标准库使用的大多数(全部?)比较对象,同样的要求。

std::greater_equal不符合Compare概念的要求。特别是,它不满足 irreflexivity For all a, comp(a,a)==false不对称If comp(a,b)==true then comp(b,a)==false(对于所有a,b)属性。换句话说,std::greater_equal不是严格的弱序。

正如aschepler所指出的那样,std::greater满足了比较概念,所以你可能正在寻找它。

答案 1 :(得分:0)

greater_equal 可以专门与 is_sorted 一起使用来禁止多个相同的元素,从而强制执行严格的排序(对于 less_equal 相同,但升序)。

注意谓词用在否定中:

<块引用>

如果对于指向序列的任何迭代器和任何非负整数 n 使得它 + n 是指向序列元素的有效迭代器 comp(*( it + n), *it) 评估为假。 (cppreference)