operator==,!=,<,<=,>,>=,<=>(std::deque)
| 在标头 <deque> 定义
|
||
template< class T, class Alloc > bool operator==( const std::deque<T, Alloc>& lhs, |
(1) | (C++26 起为 constexpr) |
| template< class T, class Alloc > bool operator!=( const std::deque<T, Alloc>& lhs, |
(2) | (C++20 前) |
| template< class T, class Alloc > bool operator< ( const std::deque<T, Alloc>& lhs, |
(3) | (C++20 前) |
| template< class T, class Alloc > bool operator<=( const std::deque<T, Alloc>& lhs, |
(4) | (C++20 前) |
| template< class T, class Alloc > bool operator> ( const std::deque<T, Alloc>& lhs, |
(5) | (C++20 前) |
| template< class T, class Alloc > bool operator>=( const std::deque<T, Alloc>& lhs, |
(6) | (C++20 前) |
template< class T, class Alloc > /* 见下文 */ |
(7) | (C++20 起) (C++26 起为 constexpr) |
比较两个 deque 的内容。
设 value_type 为 deque 的值类型(即 typename deque::value_type):
|
return std::distance(lhs.begin(), lhs.end()) |
(C++14 前) |
|
return std::equal(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); |
(C++14 起) |
value_type 不可相等比较 (EqualityComparable) ,那么行为未定义。rhs.begin(), rhs.end());。
-
value_type不可小于比较 (LessThanComparable) 。 - operator< 未建立全序。
rhs.begin(), rhs.end(), synth-three-way)。-
T未实现three_way_comparable。 - 没有为(可有 const 限定的)
value_type类型的值定义 operator<。 - operator< 未建立全序。
|
|
(C++20 起) |
参数
| lhs, rhs | - | 要比较内容的 deque
|
返回值
| 运算符 | lhs 与 rhs 相等 | lhs 在字典序上更大 | rhs 在字典序上更大 |
|---|---|---|---|
| operator== | true | false | |
| operator!= | false | true | |
| operator< | false | false | true |
| operator<= | true | ||
| operator> | false | true | false |
| operator>= | true | ||
| operator<=> | 等于 0 的某个值 | 大于 0 的某个值 | 小于 0 的某个值 |
复杂度
deque 的大小成线性。deque 的大小成线性。注解
|
各关系运算符是基于 |
(C++20 前) |
|
不定义关系运算符。此时重载决议会选择重写候选 operator<=>。 operator<=> 在有可能时会使用 |
(C++20 起) |
示例
#include <cassert> #include <compare> #include <deque> int main() { const std::deque a{1, 2, 3}, b{1, 2, 3}, c{7, 8, 9, 10}; assert ("" "比较相等的容器:" && (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 && "比较不相等的容器:" && (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
|
需要 |