Namespaces
Variants

std::partial_ordering

来自 zh.cppreference.net
 
 
 
定义于头文件 <compare>
class partial_ordering;
(从 C++20 起)

类类型 std::partial_ordering 是三路比较的结果类型,该比较:

  • 接受所有六个关系运算符(==、!=、<、<=、>、>=)。
  • 不隐含可替换性:如果 a 等价于 b,f(a) 可能不等价于 f(b),其中 f 表示一个只读取可通过实参的公开 const 成员访问的比较显著状态的函数。换句话说,等价的值可能仍然可区分。
  • 接受不可比较的值:a < b、a == b 和 a > b 都可能为 false。

常量

类型 std::partial_ordering 具有四个有效值,通过其类型的常量静态数据成员实现:

名称 定义
inline constexpr std :: partial_ordering less
[static]
表示小于(排序在前)关系的有效值
(公开静态成员常量)
inline constexpr std :: partial_ordering equivalent
[static]
表示等价(既非排序在前也非排序在后)关系的有效值
(公开静态成员常量)
inline constexpr std :: partial_ordering greater
[static]
表示大于(排序在后)关系的有效值
(公开静态成员常量)
inline constexpr std :: partial_ordering unordered
[static]
表示与不可比较值关系的有效值
(公开静态成员常量)

转换

std::partial_ordering 不能隐式转换为其他比较类别类型,而 std::strong_ordering 和 std::weak_ordering 均可隐式转换为 partial_ordering 。

比较操作

此类型的值与字面量 ​ 0 ​ 之间定义了比较运算符。这支持表达式 a <=> b == 0 或 a <=> b < 0 ,可用于将三路比较运算符的结果转换为布尔关系;参见 std::is_eq 、 std::is_lt 等。

这些函数对普通的 非限定查找 或 限定查找 不可见,仅当 std::partial_ordering 作为参数的关联类时,通过 实参依赖查找 才能找到它们。

试图将 partial_ordering 与除整数字面量 ​ 0 ​ 之外的任何值进行比较的程序行为是未定义的。

operator== operator< operator> operator<= operator>= operator<=>
与零或 partial_ordering 进行比较
(函数)

operator==

friend constexpr bool operator == ( partial_ordering v, /*unspecified*/ u ) noexcept ;
(1)
friend constexpr bool
operator == ( partial_ordering v, partial_ordering w ) noexcept = default ;
(2)

参数

v, w - 要检查的 std::partial_ordering 值
u - 接受字面零参数的任何类型的未使用参数

返回值

1) true 如果 v 为 equivalent , false 如果 v 为 less 、 greater 或 unordered
2) true 如果两个参数持有相同的值, false 否则

operator<

friend constexpr bool operator < ( partial_ordering v, /*unspecified*/ u ) noexcept ;
(1)
friend constexpr bool operator < ( /*unspecified*/ u, partial_ordering v ) noexcept ;
(2)

参数

v - 要检查的 std::partial_ordering 值
u - 接受字面零参数的任意类型的未使用参数

返回值

1) true 如果 v 为 less , false 如果 v 为 greater 、 equivalent 或 unordered
2) true 如果 v 为 greater , false 如果 v 为 less 、 equivalent 或 unordered

operator<=

friend constexpr bool operator <= ( partial_ordering v, /*unspecified*/ u ) noexcept ;
(1)
friend constexpr bool operator <= ( /*unspecified*/ u, partial_ordering v ) noexcept ;
(2)

参数

v - 要检查的 std::partial_ordering 值
u - 接受字面零参数的任何类型的未使用参数

返回值

1) true 如果 v 为 less 或 equivalent , false 如果 v 为 greater 或 unordered
2) true 如果 v 为 greater 或 equivalent , false 如果 v 为 less 或 unordered

operator>

friend constexpr bool operator > ( partial_ordering v, /*unspecified*/ u ) noexcept ;
(1)
friend constexpr bool operator > ( /*unspecified*/ u, partial_ordering v ) noexcept ;
(2)

参数

v - 要检查的 std::partial_ordering 值
u - 接受字面零参数的任何类型的未使用参数

返回值

1) true 如果 v 为 greater ,若 v 为 less 、 equivalent 或 unordered 则返回 false
2) true 如果 v 为 less ,若 v 为 greater 、 equivalent 或 unordered 则返回 false

operator>=

friend constexpr bool operator >= ( partial_ordering v, /*unspecified*/ u ) noexcept ;
(1)
friend constexpr bool operator >= ( /*unspecified*/ u, partial_ordering v ) noexcept ;
(2)

参数

v - 要检查的 std::partial_ordering 值
u - 接受字面零参数的任何类型的未使用参数

返回值

1) true 如果 v 为 greater 或 equivalent , false 如果 v 为 less 或 unordered
2) true 如果 v 为 less 或 equivalent , false 如果 v 为 greater 或 unordered

operator<=>

friend constexpr partial_ordering operator <=> ( partial_ordering v, /*unspecified*/ u ) noexcept ;
(1)
friend constexpr partial_ordering operator <=> ( /*unspecified*/ u, partial_ordering v ) noexcept ;
(2)

参数

v - 要检查的 std::partial_ordering 值
u - 接受字面量零参数的任何类型的未使用参数

返回值

1) v 。
2) 若 v 为 less 则返回 greater ,若 v 为 greater 则返回 less ,否则返回 v 。

注释

内置的 operator<=> 对浮点数值采用以下排序规则:正零与负零比较结果为 equivalent ,但仍可被区分;而 NaN 值与任何其他值比较结果均为 unordered 。

示例

参见

支持全部6种运算符且可替换的三路比较结果类型
(类)
支持全部6种运算符但不可替换的三路比较结果类型
(类)