operator==,!=,<,<=,>,>=,<=>(std::array)
Defined in header <array>
|
||
|
template
<
class T, std::size_t N >
bool operator==
(
const
std::array
<T, N>
& lhs, |
(1) | (since C++11) (constexpr since C++20) |
|
template
<
class T, std::size_t N >
bool operator!
=
(
const
std::array
<T, N>
& lhs, |
(2) | (since C++11) (until C++20) |
|
template
<
class T, std::size_t N >
bool operator<
(
const
std::array
<T, N>
& lhs, |
(3) | (since C++11) (until C++20) |
|
template
<
class T, std::size_t N >
bool operator<=
(
const
std::array
<T, N>
& lhs, |
(4) | (since C++11) (until C++20) |
|
template
<
class T, std::size_t N >
bool operator>
(
const
std::array
<T, N>
& lhs, |
(5) | (since C++11) (until C++20) |
|
template
<
class T, std::size_t N >
bool operator>=
(
const
std::array
<T, N>
& lhs, |
(6) | (since C++11) (until C++20) |
|
template
<
class T, std::size_t N >
constexpr synth-three-way-result<T>
|
(7) | (since C++20) |
Compares the contents of two arrays.
rhs.begin(), rhs.end(),
synth-three-way
)
Tmodelsthree_way_comparable.<is defined for values of type (possibly const-qualified)T, and<is a total ordering relationship.
|
The |
(since C++20) |
Parameters
| lhs, rhs | - | arrays whose contents to compare
|
-
T must meet the requirements of EqualityComparable
|
||
-
T must meet the requirements of
LessThanComparable
|
||
Return value
arrays are equal, false
arrays are not equal, false
Complexity
Linear in the size of the array.
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< 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) |
Example
#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 && ""); }
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 |