operator==,<=>(std::inplace_vector)
cppreference.net에서
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,
const std::inplace_vector<T, N>& rhs );
|
(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*/);
다음 조건 중 하나 이상이 충족되어야 합니다.
T가 three_way_comparable을 모델링합니다.<가 (const로 한정될 수 있는)T형식의 값에 대해 정의되고,<은 전체 순서 관계입니다.
<, <=, >, >= 및 != 연산자는 각각 과 으로부터operator<=> 합성operator==됩니다.
매개변수
| lhs, rhs | - | std::inplace_vector 비교할 내용을 가진 s |
-
T
는 (1)번 오버로드를 사용하기 위해
EqualityComparable
요구 사항을 충족해야 합니다.
|
||
반환값
1)
true
만약
std::inplace_vector
s의 내용이 동일하다면,
false
그렇지 않다면.
2)
그러한 요소가 존재하는 경우
lhs
와
rhs
의 첫 번째 비동등 요소 쌍의 상대적 순서,
그렇지 않은 경우
lhs.
size
(
)
<=>
rhs.
size
(
)
입니다.
복잡도
1)
크기가 다르면 상수 시간, 그렇지 않으면
lhs
와
rhs
의 크기에 선형 시간이 소요됩니다.
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
(""
"Compare equal containers:" &&
(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 &&
"Compare non equal containers:" &&
(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 &&
"");
}