部分排序,严格弱排序,总排序,应用程序的主要区别是什么
PartialOrdering, StrictWeakOrdering, TotalOrdering, what's the main difference in application
[SGI官方文件]
由于不可反身性和传递性,运算符
我还阅读了文档中严格弱排序的定义:严格弱排序
前三个公理,不可反身性、反对称性和传递性, 是部分排序的定义;等价的传递性 是严格弱排序的定义所要求的。总计 排序是满足更强大条件的排序:等价 必须与平等相同。
我不太确定这些定义。一些主要问题:
偏排序隐式定义等价 1.Is?
2.严格弱排序和总排序呢?
3.STL在排序算法中要求严格的弱排序,为什么不是部分排序或总排序?对于这个问题,我读过一些教科书,通过证明规则满足三个公理来证明比较规则是有效的:不可反性、反对称性、传递性(这是偏序的定义),文档引用该运算符<总是满足这个定义,那么为什么我们不能只使用部分排序来比较对象,或者等效地使用运算符>
部分排序本质上是<=
。如果两者都a <= b
和b <= a
那么你可以说a
等同于b
。但也有可能既不a <= b
也不b <= a
——这两个元素是无可比拟的。因此,您不能对具有偏序关系的集合强加总序(就像std::sort
需要的那样)——充其量您可以进行拓扑排序。你也不能推导出等价关系——同样,可能存在无法比拟的元素。
严格的弱排序就像<
.它不允许同时使用a < b
和b < a
,如果既不a < b
也不b < a
,你可以只发音a
和b
等价。
总排序只是严格的弱排序,其中两个元素是等价的,当且仅当它们相等时(这只有在除了小于谓词之外还有一个相等比较谓词时才有意义,并且没有C++标准库算法同时使用两者,因此这个问题在这种情况下基本上没有意义)。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 二叉排序树无法编译
- int(c) 和 c-'0' 之间的区别。C++
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 如何对点云数据进行排序
- 快速排序中使用的两个分区版本的区别
- 使用数组和链表进行选择排序的区别
- 排序和排序有什么区别?
- 内置的qsort函数和稳定的排序函数有什么区别?