[SGI official document]
我还阅读了文档中严格弱排序的定义:StrictWeakOrdering
我对这些定义不太确定。一些主要问题:
1.局部排序是否隐式定义了等价关系?
2.严格的弱排序和总排序怎么办?
3.STL在排序算法中要求严格的弱排序,为什么不是部分排序或全部排序?
对于这个问题,我已经阅读了一些教科书,通过证明该规则满足三个公理来证明该比较规则是有效的:不反身性,反对称性和可传递性(这是部分排序的定义),并且文档中指出operator
最佳答案
本质上,部分排序是<=
。如果同时使用a <= b
和b <= a
,那么您可以说a
等同于b
。但是a <= b
和b <= a
也可能是两个元素无法比拟的。结果,您不能对具有部分排序关系的集合强加总顺序(如std::sort
会需要)-充其量您可以进行拓扑排序。您也无法得出等价关系-同样,可能存在无法比拟的元素。
严格的弱排序就像<
。它不允许同时具有a < b
和b < a
,并且如果a < b
和b < a
都没有,则您只能发音等效的a
和b
。
总排序只是严格的弱排序,其中两个元素仅当且仅当它们相等时才等效(这仅在您具有除小于谓词之外的相等比较谓词且没有C++标准库算法同时使用这两个元素时才有意义)同时,因此在这种情况下,该问题很大程度上没有解决)。
关于c++ - PartialOrdering,StrictWeakOrdering,TotalOrdering,应用程序的主要区别是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18781405/