[SGI official document]



我还阅读了文档中严格弱排序的定义:StrictWeakOrdering



我对这些定义不太确定。一些主要问题:

1.局部排序是否隐式定义了等价关系?

2.严格的弱排序和总排序怎么办?

3.STL在排序算法中要求严格的弱排序,为什么不是部分排序或全部排序?
对于这个问题,我已经阅读了一些教科书,通过证明该规则满足三个公理来证明该比较规则是有效的:不反身性,反对称性和可传递性(这是部分排序的定义),并且文档中指出operator

最佳答案

本质上,部分排序是<=。如果同时使用a <= bb <= a,那么您可以说a等同于b。但是a <= bb <= a也可能是两个元素无法比拟的。结果,您不能对具有部分排序关系的集合强加总顺序(如std::sort会需要)-充其量您可以进行拓扑排序。您也无法得出等价关系-同样,可能存在无法比拟的元素。

严格的弱排序就像<。它不允许同时具有a < bb < a,并且如果a < bb < a都没有,则您只能发音等效的ab

总排序只是严格的弱排序,其中两个元素仅当且仅当它们相等时才等效(这仅在您具有除小于谓词之外的相等比较谓词且没有C++标准库算法同时使用这两个元素时才有意义)同时,因此在这种情况下,该问题很大程度上没有解决)。

关于c++ - PartialOrdering,StrictWeakOrdering,TotalOrdering,应用程序的主要区别是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18781405/

10-11 16:53