Namespaces
Variants

operator==,!=,<,<=,>,>=,<=> (std::deque)

From cppreference.net

헤더에 정의됨 <deque>
template < class T, class Alloc >

bool operator == ( const std:: deque < T, Alloc > & lhs,

const std:: deque < T, Alloc > & rhs ) ;
(1) (C++26부터 constexpr)
template < class T, class Alloc >

bool operator ! = ( const std:: deque < T, Alloc > & lhs,

const std:: deque < T, Alloc > & rhs ) ;
(2) (C++20까지)
template < class T, class Alloc >

bool operator < ( const std:: deque < T, Alloc > & lhs,

const std:: deque < T, Alloc > & rhs ) ;
(3) (C++20까지)
template < class T, class Alloc >

bool operator <= ( const std:: deque < T, Alloc > & lhs,

const std:: deque < T, Alloc > & rhs ) ;
(4) (C++20까지)
template < class T, class Alloc >

bool operator > ( const std:: deque < T, Alloc > & lhs,

const std:: deque < T, Alloc > & rhs ) ;
(5) (C++20 이전)
template < class T, class Alloc >

bool operator >= ( const std:: deque < T, Alloc > & lhs,

const std:: deque < T, Alloc > & rhs ) ;
(6) (C++20까지)
template < class T, class Alloc >

/* 아래 참조 */
operator <=> ( const std:: deque < T, Alloc > & lhs,

const std:: deque < T, Alloc > & rhs ) ;
(7) (C++20부터)
(C++26부터 constexpr)

deque 의 내용을 비교합니다.

deque 의 값 타입(즉, typename deque :: value_type )을 value_type 으로 정의합니다:

1,2) lhs rhs 의 내용이 동일한지 확인합니다. 즉, 동일한 수의 요소를 가지며 lhs 의 각 요소가 rhs 의 동일한 위치에 있는 요소와 동일하게 비교되는지 확인합니다.
다음 코드와 동일함:

return std:: distance ( lhs. begin ( ) , lhs. end ( ) )
== std:: distance ( rhs. begin ( ) , rhs. end ( ) )
&& std:: equal ( lhs. begin ( ) , lhs. end ( ) , rhs. begin ( ) ) ;

(C++14 이전)

return std:: equal ( lhs. begin ( ) , lhs. end ( ) , rhs. begin ( ) , rhs. end ( ) ) ;

(C++14 이후)
만약 value_type EqualityComparable 가 아니라면, 동작은 정의되지 않습니다.
3-7) lhs rhs 의 내용을 사전식 순서로 비교합니다.
3-6) 다음에 해당함: return std:: lexicographical_compare ( lhs. begin ( ) , lhs. end ( ) ,
rhs. begin ( ) , rhs. end ( ) ) ;
.
다음 조건 중 하나라도 충족되면, 동작은 정의되지 않습니다:
7) 다음과 동일함: return std:: lexicographical_compare_three_way ( lhs. begin ( ) , lhs. end ( ) ,
rhs. begin ( ) , rhs. end ( ) ,
synth-three-way )
.
반환 타입은 synth-three-way 의 반환 타입입니다 (즉, synth-three-way-result  < value_type > ).
다음 조건 중 하나라도 만족되면, 동작은 정의되지 않습니다:
  • T three_way_comparable 를 모델하지 않는 경우.
  • operator < 가 (const 한정이 가능한) value_type 타입의 값에 대해 정의되지 않은 경우.
  • operator < total order 를 설정하지 않는 경우.

< , <= , > , >= , 그리고 != 연산자들은 각각 operator <=> operator == 로부터 합성됩니다 .

(C++20부터)

목차

매개변수

lhs, rhs - deque 비교할 내용을 가진

반환값

연산자 lhs rhs
가 동일함
lhs
사전순으로 더 큼
rhs
사전순으로 더 큼
operator == true false
operator ! = false true
operator < false false true
operator <= true
operator > false true false
operator >= true
operator <=> 0 과 동일한 값 0 보다 큰 값 0 보다 작은 값

복잡도

1,2) lhs rhs 의 크기가 다르면 상수 시간, 그렇지 않으면 deque 의 크기에 선형 시간.
3-7) deque 의 크기에 선형적으로 비례합니다.

참고 사항

관계 연산자는 value_type operator < 을 기반으로 정의됩니다.

(C++20 이전)

관계 연산자는 정의되지 않습니다. 재작성된 후보 operator <=> 이 오버로드 해결에 의해 선택됩니다.

operator <=> 은 가능한 경우 value_type operator <=> 을 사용하고, 그렇지 않으면 value_type operator < 을 사용합니다. 특히, value_type 이 자체적으로 operator <=> 을 제공하지 않지만, 삼방 비교 가능 타입으로 암시적으로 변환 가능한 경우, operator < 대신 해당 변환이 사용됩니다.

(C++20 이후)

예제

#include <cassert>
#include <compare>
#include <deque>
int main()
{
    const std::deque
        a{1, 2, 3},
        b{1, 2, 3},
        c{7, 8, 9, 10};
    assert
    (""
        "동일한 컨테이너 비교:" &&
        (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 &&
        "다른 컨테이너 비교:" &&
        (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 &&
    "");
}

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3431 C++20 operator <=> T
three_way_comparable 를 모델링할 것을 요구하지 않음
요구함