operator==,<=>(std::inplace_vector)
来自cppreference.com
< cpp | container | inplace vector
constexpr friend bool operator==( const std::inplace_vector<T, N>& lhs, const std::inplace_vector<T, N>& rhs ); |
(1) | (C++26 起) |
constexpr friend synth-three-way-result<T> operator<=>( const std::inplace_vector<T, N>& lhs, |
(2) | (C++26 起) |
比较两个 std::inplace_vector 的内容。
1) 检查 lhs 和 rhs 的内容是否相等,即它们是否具有相同数量的元素且 lhs 中的每个元素与 rhs 中相同位置的元素比较都相等。
2) 按字典序比较 lhs 和 rhs 的内容。此比较如同以下调用
std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(), synth-three-way);.
std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(), synth-three-way);.
必须满足以下至少一项条件:
-
T
实现three_way_comparable
。 - 针对(可能 const 限定的)
T
类型的值定义了<
,并且<
是一种全序关系。
<
、<=
、>
、>=
及 !=
运算符分别从 operator<=> 与 operator== 合成。
参数
lhs, rhs | - | 要比较内容的 std::inplace_vector |
- 为使用重载 (1), T 必须满足可相等比较 (EqualityComparable) 。
|
返回值
1) 当两个 std::inplace_vector 的内容相等时返回 true,否则返回 false。
2) lhs 和 rhs 中首对不等价元素的相对顺序(若存在这种元素),否则返回 lhs.size() <=> rhs.size()。
复杂度
1) 当 lhs 与 rhs 大小不同时是常数,否则与 std::inplace_vector 的大小成线性。
2) 与 std::inplace_vector 的大小成线性。
注解
各关系运算符是基于 synth-three-way 定义的,若可能它会使用 operator<=>,否则使用 operator<。
要注意,如果元素自身未提供 operator<=> 但可隐式转换为可三路比较的类型,那么就用这项转换取代 operator<。
示例
运行此代码
#include <inplace_vector> int main() { constexpr std::inplace_vector<int, 4> a{1, 2, 3}, b{1, 2, 3}, c{7, 8, 9, 10}; static_assert ("" "比较相等容器:" && (a != b) == false && (a == b) == true && (a < b) == false && (a <= b) == true && (a > b) == false && (a >= b) == true && (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) < 0 && (a <=> c) != 0 && (a <=> c) <= 0 && ""); }