c++ - CMP 是如何在 C++ 中定义的?用 < 或用 <=?

标签 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);
...

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

但是如果 < 像文档中那样使用,那应该返回 1。

它可以与 <= 一起使用,但这不是它记录的方式。

我真的很困惑。

最佳答案

需要比较来定义 strict weak ordering .严格的弱排序从不可比较关系定义一组等价类,即如果 x < y 为假,且 y < x 也为假(即 x 和 y 不能与 < 比较),则认为 x 和 y 是等价的。这些等价类有一个全序,这就是排序函数产生的全序。

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

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

关于c++ - CMP 是如何在 C++ 中定义的?用 < 或用 <=?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356782/

相关文章:

c++ - 检测偶数和奇数 C++ vector 迭代器

c++ - 试图让异步在 Windows C++ 应用程序中工作

c++ - 如何在 Visual Studio 中读取 Unresolved external symbol 错误?

c++ - 为什么用户定义的转换没有在调用对象上隐式发生

javascript - 排序颜色/颜色值

java - 使用数字对对数组进行排序

c - 如何编写与c中的for循环相同的while循环

c++ - 如何使用非 STL 类型(例如来自 ICU 的 UnicodeString)创建 unordered_map?

c++ - 3d vector - 变换和减去

c++ - 把最胖的人从重载的飞机上扔下来。