如何在c ++中定义cmp?用<或用<=?

15r*_*0nk 1 c++ sorting stl compare

我问我如何定义std :: sort和std :: is_sorted中的cmp函数.

这里有两个is_sorted_until文档怎么说它应该是operator <:

en.cppreference.com cplusplus.com

但我认为应该存在相同元素的问题.列表{1,1,1}不应该排序,因为1 <1 == false.但有一个例子说:

...
int *sorted_end = std::is_sorted_until(nums, nums + N);
...
Run Code Online (Sandbox Code Playgroud)

1 1 4 9 5 3:4个初始排序元素

但如果<使用<记录,那么应该返回1.

它适用于<=,但这不是它的记录方式.

我真的很困惑.

R. *_*des 6

需要进行比较以定义严格的弱排序.严格的弱排序根据不可比性关系定义一组等价类,即,如果x <y为假,并且y <x也为假(即x和y不能与<相比),则x和y被认为是等价的.这些等价类具有总顺序,这是排序函数产生的总顺序.

在给出的例子中,{1,1,1}只有一个等价类,一个由{1,1,1}组成.

is_sorted_until 找到x [i] <x [i-1]为真的第一个元素x [i].