operator==,!=,<,<=,>,>=,<=>(std::array)
From cppreference.com
| Defined in header <array>
|
||
| (1) | ||
| template< class T, std::size_t N > bool operator==( const std::array<T,N>& lhs, |
(until C++20) | |
| template< class T, std::size_t N > constexpr bool operator==( const std::array<T,N>& lhs, |
(since C++20) | |
| template< class T, std::size_t N > bool operator!=( const std::array<T,N>& lhs, |
(2) | (until C++20) |
| template< class T, std::size_t N > bool operator<( const std::array<T,N>& lhs, |
(3) | (until C++20) |
| template< class T, std::size_t N > bool operator<=( const std::array<T,N>& lhs, |
(4) | (until C++20) |
| template< class T, std::size_t N > bool operator>( const std::array<T,N>& lhs, |
(5) | (until C++20) |
| template< class T, std::size_t N > bool operator>=( const std::array<T,N>& lhs, |
(6) | (until C++20) |
| template< class T, std::size_t N > constexpr /* see below */ operator<=>( const std::array<T,N>& lhs, |
(7) | (since C++20) |
Compares the contents of two arrays.
1-2) Checks if the contents of
lhs and rhs are equal, that is, they have the same number of elements and each element in lhs compares equal with the element in rhs at the same position.3-6) Compares the contents of
lhs and rhs lexicographically. The comparison is performed by a function equivalent to std::lexicographical_compare. 7) Compares the contents of
lhs and rhs lexicographically. The comparison is performed as if by calling std::lexicographical_compare_three_way on two arrays with a function object performing synthesized three-way comparison (see below). The return type is same as the result type of synthesized three-way comparison.
Given two const E lvalues lhs and rhs as left hand operand and right hand operand respectively (where E is T), synthesized three-way comparison is defined as:
- if std::three_way_comparable_with<E, E> is satisfied, equivalent to lhs <=> rhs;
- otherwise, if comparing two const E lvalues by operator< is well-formed and the result type satisfies boolean-testable, equivalent to
lhs < rhs ? std::weak_ordering::less : rhs < lhs ? std::weak_ordering::greater : std::weak_ordering::equivalent
- otherwise, synthesized three-way comparison is not defined, and operator<=> does not participate in overload resolution.
E and < do not establish a total order.Parameters
| lhs, rhs | - | arrays 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.
| ||
Return value
1) true if the contents of the
arrays are equal, false otherwise2) true if the contents of the
arrays are not equal, false otherwise3) true if the contents of the
lhs are lexicographically less than the contents of rhs, false otherwise4) true if the contents of the
lhs are lexicographically less than or equal to the contents of rhs, false otherwise5) true if the contents of the
lhs are lexicographically greater than the contents of rhs, false otherwise6) true if the contents of the
lhs are lexicographically greater than or equal to the contents of rhs, false otherwise7) The relative order of the first pair of non-equivalent elements in
lhs and rhs if there are such elements, lhs.size() <=> rhs.size() otherwise.Complexity
Linear in the size of the array
Example
Run this code
#include <algorithm> #include <iostream> #include <array> int main() { std::array<int, 3> alice{1, 2, 3}; std::array<int, 3> bob{7, 8, 9}; std::array<int, 3> eve{1, 2, 3}; std::cout << std::boolalpha; // Compare non equal containers std::cout << "alice == bob returns " << (alice == bob) << '\n'; std::cout << "alice != bob returns " << (alice != bob) << '\n'; std::cout << "alice < bob returns " << (alice < bob) << '\n'; std::cout << "alice <= bob returns " << (alice <= bob) << '\n'; std::cout << "alice > bob returns " << (alice > bob) << '\n'; std::cout << "alice >= bob returns " << (alice >= bob) << '\n'; std::cout << '\n'; // Compare equal containers std::cout << "alice == eve returns " << (alice == eve) << '\n'; std::cout << "alice != eve returns " << (alice != eve) << '\n'; std::cout << "alice < eve returns " << (alice < eve) << '\n'; std::cout << "alice <= eve returns " << (alice <= eve) << '\n'; std::cout << "alice > eve returns " << (alice > eve) << '\n'; std::cout << "alice >= eve returns " << (alice >= eve) << '\n'; }
Output:
alice == bob returns false alice != bob returns true alice < bob returns true alice <= bob returns true alice > bob returns false alice >= bob returns false alice == eve returns true alice != eve returns false alice < eve returns false alice <= eve returns true alice > eve returns false alice >= eve returns true