Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ stl排序-严格弱排序_C++_Algorithm_Stl_Strict Weak Ordering - Fatal编程技术网

C++ stl排序-严格弱排序

C++ stl排序-严格弱排序,c++,algorithm,stl,strict-weak-ordering,C++,Algorithm,Stl,Strict Weak Ordering,为什么STL使用的是比较函数?为什么不能是偏序呢?A不足以实现某些算法,例如排序算法。由于偏序集合不一定定义集合中所有元素之间的关系,如何对偏序中没有顺序关系的两个项目的列表进行排序?a不足以实现某些算法,例如排序算法。由于偏序集合不一定定义集合中所有元素之间的关系,因此如何对在偏序中没有顺序关系的两个项目的列表进行排序?不能使用偏序执行二进制搜索。不能创建具有偏序的二元搜索树。算法中的哪些函数/数据类型需要排序并且可以使用偏序?不能使用偏序执行二进制搜索。不能创建具有偏序的二元搜索树。算法中的

为什么STL使用的是比较函数?为什么不能是偏序呢?

A不足以实现某些算法,例如排序算法。由于偏序集合不一定定义集合中所有元素之间的关系,如何对偏序中没有顺序关系的两个项目的列表进行排序?

a不足以实现某些算法,例如排序算法。由于偏序集合不一定定义集合中所有元素之间的关系,因此如何对在偏序中没有顺序关系的两个项目的列表进行排序?

不能使用偏序执行二进制搜索。不能创建具有偏序的二元搜索树。算法中的哪些函数/数据类型需要排序并且可以使用偏序?

不能使用偏序执行二进制搜索。不能创建具有偏序的二元搜索树。算法中的哪些函数/数据类型需要排序并且可以使用偏序?

简单地说,严格弱排序定义为定义(可计算)等价关系的排序。等价类按严格弱序排序:严格弱序是等价类上的严格序

偏序(即非严格弱序)并不定义等价关系,因此任何使用“等价元素”概念的规范对于非严格弱序的偏序都是毫无意义的。所有STL关联容器在某些时候都使用这个概念,因此,对于不是严格弱序的偏序,所有这些规范都是没有意义的

因为偏序(不是严格弱序)不一定定义任何严格序,所以不能根据偏序对常识中的元素进行“排序”(您所能做的只是具有较弱属性的“拓扑排序”)

给定

  • 数学集合
    S

  • 偏序简单地说,严格弱序定义为定义(可计算)等价关系的序。等价类按严格弱序排序:严格弱序是等价类上的严格序

    偏序(即非严格弱序)并不定义等价关系,因此任何使用“等价元素”概念的规范对于非严格弱序的偏序都是毫无意义的。所有STL关联容器在某些时候都使用这个概念,因此,对于不是严格弱序的偏序,所有这些规范都是没有意义的

    因为偏序(不是严格弱序)不一定定义任何严格序,所以不能根据偏序对常识中的元素进行“排序”(您所能做的只是具有较弱属性的“拓扑排序”)

    给定

    • 数学集合
      S
    • 引用给定答案的偏序

      因为在内部,这些算法实现“等于”as
      !(a

      如果使用
      引用给出的答案:

      因为在内部,这些算法实现“等于”as
      !(a


      如果您使用了
      ,您不能澄清show sample的含义吗?您不能澄清show sample的含义吗?“偏序集不一定定义集合中所有元素之间的关系”严格弱序并不更好,它并不总是使一个元素小于或大于另一个元素。“偏序集不一定定义集的所有元素之间的关系”严格弱序并不好,它并不总是使一个元素小于或大于另一个元素。因此,实际上严格弱序确实隐式定义了一个等价关系?例如,如果I(x)I(x)
      是一个集合(S
      S
      的一部分);by
      I(x)你的意思是:对于作为
      I(x)
      元素的每个
      y
      y
      ?如果是
      不是(x(其中,
      x
      S
      的一个元素,
      E
      S
      的一部分)并不意味着
      E={x}
      。第一段可能需要一些工作。我不认为“排序”一词有一个普遍一致的定义,所以也许应该说“严格的偏序”……但前提是你真正的意思是这样(我实际上不确定)。现在还不清楚它是如何定义等价关系的。而且我认为“(可计算)”在这里没有任何意义。因此,建议重写第一句话:“简单地说,严格弱序可以定义为严格偏序<,其中关系(不是(啊……我的回答在措辞上有严重的问题!我现在感到惭愧。答案确实需要编辑。“我认为“(可计算)”在这里没有任何意义。”在STL的上下文中,关系不仅仅是数学关系。数学上定义良好但不能计算的关系是无用的。在STL的上下文中,关系是一个C++函数(或函子),返回布尔和数学关系,C++函数必须返回一个值(不是循环,而不是调用出口)。如果关系成立,则返回值必须为真。因此,实际上严格弱序确实隐式定义了一个等价关系?比如说,如果I(x)I(x)
      是一个集合(S
      的一部分);by
      I(x)
      您的意思是:对于每个
      yL(x) = { y in S | y<x }
      I(x) = { y in S | not(y<x) and not(x<y) }
      G(x) = { y in S | x<y }
      
       L(x) : set of elements less than x
       I(x) : set of elements incomparable with x
       G(x) : set of elements greater than x