operator==,!=,<,<=,>,>=,<=>(std::array)
来自 cppreference.cn
定义于头文件 <array> |
||
template< class T, std::size_t N > bool operator==( const std::array<T, N>& lhs, |
(1) | (C++11 起) (C++20 起为 constexpr) |
template< class T, std::size_t N > bool operator!=( const std::array<T, N>& lhs, |
(2) | (C++11 起) (C++20 前) |
template< class T, std::size_t N > bool operator<( const std::array<T, N>& lhs, |
(3) | (C++11 起) (C++20 前) |
template< class T, std::size_t N > bool operator<=( const std::array<T, N>& lhs, |
(4) | (C++11 起) (C++20 前) |
template< class T, std::size_t N > bool operator>( const std::array<T, N>& lhs, |
(5) | (C++11 起) (C++20 前) |
template< class T, std::size_t N > bool operator>=( const std::array<T, N>& lhs, |
(6) | (C++11 起) (C++20 前) |
template< class T, std::size_t N > constexpr synth-three-way-result<T> |
(7) | (C++20 起) |
比较两个 array
的内容。
1,2) 检查 lhs 和 rhs 的内容是否相等,即它们是否具有相同数量的元素,并且 lhs 中的每个元素都与 rhs 中相同位置的元素进行相等比较。
7) 按字典顺序比较 lhs 和 rhs 的内容。比较的执行方式如同调用 std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(),
synth-three-way)。 如果以下条件均不满足,则行为未定义
-
T
满足three_way_comparable
。 - 为类型(可能 const 限定的)
T
的值定义了<
,并且<
是全序关系。
|
(C++20 起) |
目录 |
[编辑] 参数
lhs, rhs | - | 要比较内容的 array |
-为了使用重载 (1,2),T 必须满足 EqualityComparable 的要求。 | ||
-为了使用重载 (3-6),T 必须满足 LessThanComparable 的要求。排序关系必须建立全序。 |
[编辑] 返回值
1) 如果
array
的内容相等,则为 true,否则为 false。2) 如果
array
的内容不相等,则为 true,否则为 false。3) 如果 lhs 的内容按字典顺序“小于” rhs 的内容,则为 true,否则为 false。
4) 如果 lhs 的内容按字典顺序“小于或等于” rhs 的内容,则为 true,否则为 false。
5) 如果 lhs 的内容按字典顺序“大于” rhs 的内容,则为 true,否则为 false。
6) 如果 lhs 的内容按字典顺序“大于或等于” rhs 的内容,则为 true,否则为 false。
7) 如果存在非等价元素对,则返回 lhs 和 rhs 中第一对非等价元素的相对顺序,否则返回 lhs.size() <=> rhs.size()。
[编辑] 复杂度
与 array
的大小呈线性关系。
[编辑] 注解
关系运算符是根据元素类型的 operator< 定义的。 |
(C++20 前) |
关系运算符是根据 synth-three-way 定义的,它尽可能使用 operator<=>,否则使用 operator<。 值得注意的是,如果元素本身不提供 operator<=>,但可以隐式转换为三向可比较类型,则将使用该转换而不是 operator<。 |
(C++20 起) |
[编辑] 示例
运行此代码
#include <cassert> #include <compare> #include <array> int main() { const std::array a{1, 2, 3}, b{1, 2, 3}, c{7, 8, 9}; assert ("" "Compare equal containers:" && (a != b) == false && (a == b) == true && (a < b) == false && (a <= b) == true && (a > b) == false && (a >= b) == true && (a <=> b) != std::weak_ordering::less && (a <=> b) != std::weak_ordering::greater && (a <=> b) == std::weak_ordering::equivalent && (a <=> b) >= 0 && (a <=> b) <= 0 && (a <=> b) == 0 && "Compare non equal containers:" && (a != c) == true && (a == c) == false && (a < c) == true && (a <= c) == true && (a > c) == false && (a >= c) == false && (a <=> c) == std::weak_ordering::less && (a <=> c) != std::weak_ordering::equivalent && (a <=> c) != std::weak_ordering::greater && (a <=> c) < 0 && (a <=> c) != 0 && (a <=> c) <= 0 && ""); }
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 3431 | C++20 | operator<=> 未要求 T 满足 three_way_comparable |
要求 |