operator==,!=,<,<=,>,>=,<=>(std::vector)
Defined in header <vector> | ||
template<class T, class Alloc > bool operator==(conststd::vector<T, Alloc>& lhs, | (1) | (constexpr since C++20) |
template<class T, class Alloc > bool operator!=(conststd::vector<T, Alloc>& lhs, | (2) | (until C++20) |
template<class T, class Alloc > bool operator<(conststd::vector<T, Alloc>& lhs, | (3) | (until C++20) |
template<class T, class Alloc > bool operator<=(conststd::vector<T, Alloc>& lhs, | (4) | (until C++20) |
template<class T, class Alloc > bool operator>(conststd::vector<T, Alloc>& lhs, | (5) | (until C++20) |
template<class T, class Alloc > bool operator>=(conststd::vector<T, Alloc>& lhs, | (6) | (until C++20) |
template<class T, class Alloc > constexpr synth-three-way-result<T> | (7) | (since C++20) |
Compares the contents of two vector
s.
rhs.begin(), rhs.end(),
synth-three-way).T
modelsthree_way_comparable
.<
is defined for values of type (possibly const-qualified)T
, and<
is a total ordering relationship.
The | (since C++20) |
Contents |
[edit]Parameters
lhs, rhs | - | vector s whose contents to compare |
-T must meet the requirements of EqualityComparable in order to use overloads (1,2). | ||
-T must meet the requirements of LessThanComparable in order to use overloads (3-6). The ordering relation must establish total order. |
[edit]Return value
vector
s are equal, false otherwise.vector
s are not equal, false otherwise.[edit]Complexity
vector
.vector
.[edit]Notes
The relational operators are defined in terms of the element type's operator<. | (until C++20) |
The relational operators are defined in terms of synth-three-way, which uses operator<=> if possible, or operator< otherwise. Notably, if the element does not itself provide operator<=>, but is implicitly convertible to a three-way comparable type, that conversion will be used instead of operator<. | (since C++20) |
[edit]Example
#include <cassert>#include <compare>#include <vector> int main(){conststd::vector 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]Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3431 | C++20 | operator<=> did not require T to model three_way_comparable | requires |