更大的运算符">"满足严格的弱排序吗?
Does greater operator ">" satisfy strict weak ordering?
定义:
设
<
为二元关系,其中a < b
表示"a
小于b
"。
设
>
为二元关系,其中a > b
表示"a
大于b
"。
因此,我们假设<
和>
具有我们通常在日常生活中使用的含义。然而,在一些编程语言(例如C++(中,我们可以重载它们以给它们不同的定义,此后我们不再考虑这一点。
上下文:
就我阅读严格弱序的数学定义(例如维基百科(而言,我认为<
和>
都满足了它。然而,我在许多网站上看到的所有例子都只涉及<
。甚至有一个网站说
他们的大致意思是,严格弱序必须以"小于"的行为方式表现:如果a小于b,则b不小于a,如果a小于b且b小于c,则a小于c,依此类推
此外,在N4140(C++14国际标准(中,严格弱排序被定义为
(§25.4-4(如果我们将
equiv(a, b)
定义为!comp(a, b) && !comp(b, a)
,则要求comp
和equiv
都是传递关系
其中comp
定义为
(§25.4-2(
Compare
是一个函数对象类型(20.9(。应用于Compare
类型对象的函数调用操作的返回值,当上下文转换为bool
时(第4条(,如果调用的第一个参数小于第二个参数,则产生true
,否则产生false
。Compare comp
始终用于算法假定为排序关系。
问题:
">"是否满足严格弱序?我希望如此,但没有信心。
大运算符">"满足严格弱排序吗?
数学上的严格大于关系是一个严格的弱排序。
对于C++语言中的运算符:对于所有整数类型:是。一般来说:没有,但在大多数情况下是的。同样适用于严格小于运算符。
至于令人困惑的引号,"小于">在该上下文中旨在传达这意味着排序操作的最终结果是一个非递减序列,即对象"小于"或等于后面的对象。如果使用std::greater
作为比较对象,则值越大,则按顺序"越小"。
这可能会让人感到困惑,但并不是要排除严格大于运算符。
不满足严格弱序的情况是什么?
一些例子:
- 重载了不满足属性的运算符
- 不指向同一数组的指针上的
>
运算符具有未指定的结果 >
不满足IEEE-754表示中浮点类型的不可伸缩性要求,除非NaN被排除在域之外
即使标准对任意Compare
函数引用"小于",在排序的上下文中也只意味着"小于">。
如果我通过比较函数[](int a, int b) { return a > b; }
定义了一个排序,那么如果一个元素的整数值大于,则该排序中的一个元素"小于"另一个元素。这是因为我创建的排序是整数的逆序排序。您不应该在排序中将<
读作"小于"。你应该把它读成"之前"。
每当x < y
是严格弱序时,x > y
也是严格弱序,只是具有相反的顺序。
- 使用运算符+将两个已排序的链表合并到位
- 尝试使用比较运算符对对象向量进行排序
- 更大的运算符">"满足严格的弱排序吗?
- STL按客户"<"运算符对向量进行排序。为什么要将"<"运算符定义为 const?
- 使用运算符覆盖排序没有得到我想要的
- 运算符重载在 CPP 中的排序中如何工作?
- 对于列表排序,有没有办法使用相同的参数让多个运算符重载?
- 使用赋值运算符功能按距离对数组对象进行排序
- 重载小于 (<) 运算符,用于以多种方式对对象进行排序
- 排序向量<变体<...>>无法通过运算符正常工作<
- 是否有使用 c++ &&(AND) 运算符排序
- C++11(排序)中的逗号运算符
- 运算符<用于列表排序
- 如何在模板类中重载较少运算符以供排序算法使用
- 排序中的<运算符断言无效
- C++类指针的排序与重载运算符<
- 使用较少STL运算符对点进行排序
- 排序运算符在C++中不起作用
- 试图使用重载C++的运算符按字母顺序对图书向量进行排序
- C++中的严格弱排序运算符