std :: is_sorted和严格的比较少?

Vin*_*ent 11 c++ sorting comparator stl-algorithm c++11

我不太了解std::is_sorted算法及其默认行为.如果我们查看cppreference,它会说默认情况下std::is_sorted使用<运算符.而不是那样,我发现使用<=是自然的.但我的问题是,对于以下数字列表:

1 2 3 3 4 5
Run Code Online (Sandbox Code Playgroud)

它会回来true,即使3 < 3应该false.怎么可能?

编辑:它似乎比我想象的更糟糕,因为std::less_equal<int>在这种情况下传递将返回false ...当我传递比较器函数时应用的条件是什么?

awe*_*oon 10

每25.4/5:

序列相对于分类到一个比较器comp,如果为任何迭代器i指向序列和任何非负整数n ,使得i + n是指向序列的元素的有效迭代,comp(*(i + n), *i) == false.

因此对于

1 2 3 3 4 5
Run Code Online (Sandbox Code Playgroud)

std::less<int>()(*(i + n), *i)将返回false所有n,同时std::less_equal将返回true案件3 3.