operator==,!=,<,<=,>,>=,<=>(std::deque)
来自 cppreference.com
定义在头文件 <deque> 中 |
||
template< class T, class Alloc > bool operator==( const std::deque<T, Alloc>& lhs, |
(1) | |
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 > synth-three-way-result<T> |
(7) | (自 C++20) |
比较两个 deque
的内容。
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
。 -
<
为类型(可能限定为常量)T
的值定义,并且<
是一个全序关系。
|
(自 C++20) |
内容 |
[编辑] 参数
lhs, rhs | - | 要比较其内容的 deque |
-为了使用重载 (1,2),T 必须满足 EqualityComparable 的要求。 | ||
-为了使用重载 (3-6),T 必须满足 LessThanComparable 的要求。排序关系必须建立全序。 |
[编辑] 返回值
1) 如果
deque
的内容相等,则为 true,否则为 false。2) 如果
deque
的内容不相等,则为 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()。
[edit] 复杂度
1,2) 如果 lhs 和 rhs 的大小不同,则为常数时间;否则为
deque
大小的线性时间。3-7) 为
deque
大小的线性时间。[edit] 注释
关系运算符是根据元素类型的 operator< 定义的。 |
(直到 C++20) |
关系运算符是根据 synth-three-way 定义的,如果可能,它使用 operator<=>,否则使用 operator<。 值得注意的是,如果元素本身没有提供 operator<=>,但可以隐式转换为三元可比较类型,则将使用该转换而不是 operator<。 |
(自 C++20) |
[edit] 示例
运行此代码
#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 ("" "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 && ""); }
[edit] 缺陷报告
以下行为变更缺陷报告被追溯应用到以前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 3431 | C++20 | operator<=> 不需要 T 模拟 three_way_comparable |
需要 |