Namespaces
Variants

node-handle

From cppreference.net
template < /* unspecified */ >
class /*node-handle*/ ;
(C++17부터)
( 설명 전용* )

node handle associative containers unordered associative containers 로부터 단일 요소의 소유권을 수락하는 객체입니다. 호환 가능한 노드를 가진 다른 컨테이너로 해당 소유권을 이전하는 데 사용될 수 있습니다.

노드 핸들에는 두 가지 가능한 상태가 있습니다:

  • 컨테이너에서 추출된 요소를 참조하거나,
  • 비어 있는  상태입니다.

노드 핸들이 비어 있지 않다면, 이전에 추출된 컨테이너의 할당자와 동일한 할당자를 포함합니다.

모든 맵 컨테이너( std::map , std::multimap , std::unordered_map , 그리고 std::unordered_multimap )에서 key_type Key 이고 mapped_type T 인 경우, std:: pair < Key, T > 또는 std:: pair < const Key, T > 에 대한 사용자 정의 특수화가 존재할 때, 노드 핸들 관련 연산의 동작은 정의되지 않습니다.

목차

중첩 타입

유형 정의
key_type (맵 컨테이너 전용) 노드에 저장된 키
mapped_type (맵 컨테이너 전용) 노드에 저장된 요소의 매핑된 부분
value_type (셋 컨테이너 전용) 노드에 저장된 요소
allocator_type 요소를 파괴할 때 사용되는 할당자
container_node_type 미지정
( 설명 전용 멤버 유형* )
ator_traits std:: allocator_traits < allocator_type >
( 설명 전용 멤버 유형* )

다음을 참조하십시오: AssociativeContainer UnorderedAssociativeContainer 에서 설명 전용이 아닌 중첩 타입들의 실제 정의를 확인할 수 있습니다.

데이터 멤버

멤버 설명

typename ator_traits  :: template
rebind_traits < container_node_type  > :: pointer

ptr_
참조된 객체를 포함하는 컨테이너 노드에 대한 포인터 [1]
( 설명 전용 멤버 객체* )
std:: optional < allocator_type > alloc_ 저장된 할당자
( 설명 전용 멤버 객체* )
  1. 요소를 추출하는 동안 가리키는 컨테이너 노드의 소유권은 이미 소스 컨테이너로부터 분리되었습니다. 소스 컨테이너의 수명이 종료되었더라도 컨테이너 노드와 포함된 요소는 여전히 접근 가능합니다.

멤버 함수

node-handle  :: node-handle

constexpr /*node-handle*/ ( ) noexcept ;
(1)
/*node-handle*/ ( /*node-handle*/ && other ) noexcept ;
(2) (constexpr since C++26)
1) 기본 생성자는 node handle을 빈 상태로 초기화합니다.
2) 이동 생성자는 컨테이너 요소의 소유권을 other 로부터 가져옵니다.
  • ptr_ other. ptr_ 로 초기화됩니다.
  • alloc_ other. alloc_ 로부터 이동 생성됩니다.
  • nullptr other. ptr_ 에 할당합니다.
  • std:: nullopt other. ptr_ 에 할당합니다.

매개변수

other - 다른 node handle

참고 사항

사용자가 제공하는 복사 생성자는 없습니다. node-handle CopyConstructible 이 아닙니다.

이동 생성과 이동 할당 외에도, 비어 있지 않은 node-handle 은 (unordered) associative container의 extract 멤버 함수를 호출해서만 생성될 수 있습니다.

node-handle  :: operator=

/*node-handle*/ & operator = ( /*node-handle*/ && other ) ;
(constexpr since C++26)

이동 할당 연산자는 * this 의 상태를 other 의 상태로 이동 의미론을 사용하여 대체합니다.

  1. 만약 ptr_ ! = nullptr true 인 경우, ator_traits  :: destroy 를 호출하여 * this 가 참조하는 요소를 파괴한 후, ator_traits  :: rebind_traits < container-node-type  > :: deallocate 를 호출하여 참조된 요소의 저장 공간을 할당 해제합니다.
  2. other. ptr_ ptr_ 에 할당합니다.
  3. 만약 ator_traits  :: propagate_on_container_move_assignment true 인 경우, other. alloc_ alloc_ 로 이동 할당합니다.
  4. nullptr other. ptr_ 에 할당하고, std:: nullopt other. alloc_ 에 할당합니다.

다음 값들이 모두 false 인 경우, 동작은 정의되지 않습니다:

  • ator_traits  :: propagate_on_container_move_assignment
  • ! alloc_
  • alloc_ == other. alloc_

매개변수

other - 다른 node handle

반환값

* this

예외

아무것도 던지지 않습니다.

참고

사용자 제공 복사 할당 연산자는 없습니다. node-handle CopyAssignable 가 아닙니다.

node-handle  :: ~ node-handle

~ /*node-handle*/ ( ) ;
(C++26부터 constexpr)

만약 ptr_ ! = nullptr true 인 경우, * this 가 참조하는 요소를 ator_traits  :: destroy 를 호출하여 파괴한 다음, ator_traits  :: rebind_traits < container-node-type  > :: deallocate 를 호출하여 컨테이너 요소를 할당 해제합니다.

그렇지 않은 경우, 아무 작업도 수행하지 않습니다.

node-handle  :: empty

bool empty ( ) const noexcept ;
(constexpr since C++26)

노드 핸들이 비어 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

반환값

ptr_ == nullptr

node-handle  :: operator bool

explicit operator bool ( ) const noexcept ;
(constexpr since C++26)

node handle가 비어 있으면 false 로 변환하고, 그렇지 않으면 true 로 변환합니다.

Return value

ptr_ ! = nullptr

node-handle  :: get_allocator

allocator_type get_allocator ( ) const ;
(constexpr since C++26)

저장된 할당자의 복사본을 반환합니다.

만약 empty ( ) true 인 경우, 동작은 정의되지 않습니다.

반환값

* alloc_

예외

아무것도 던지지 않습니다.

node-handle  :: value (set containers only)

value_type & value ( ) const ;
(constexpr since C++26)

*this 가 참조하는 요소에 대한 참조를 반환합니다.

empty() true 인 경우, 동작은 정의되지 않습니다.

반환 값

위에서 설명한 대로입니다.

예외

아무 것도 throw하지 않습니다.

node-handle  :: key (map containers only)

key_type & key ( ) const ;
(constexpr since C++26)

key_type 멤버에 대한 비상수 참조를 반환합니다. 이 멤버는 * this 가 참조하는 요소의 것입니다.

만약 empty ( ) true 라면, 동작은 정의되지 않습니다.

반환값

위에서 설명한 대로입니다.

예외

아무것도 던지지 않습니다.

참고

이 함수는 맵에서 추출된 노드의 키를 수정한 후, 요소를 복사하거나 이동하지 않고 맵에 다시 삽입할 수 있게 합니다.

node-handle  :: mapped (map containers only)

mapped_type & mapped ( ) const ;
(constexpr since C++26)

mapped_type 멤버에 대한 참조를 반환합니다. 이 멤버는 * this 가 참조하는 요소의 멤버입니다.

만약 empty ( ) true 인 경우, 동작은 정의되지 않습니다.

반환값

위에서 설명한 대로입니다.

예외

아무것도 throw하지 않습니다.

node-handle  :: swap

void swap ( /*node-handle*/ & other ) noexcept ( /* see below */ ) ;
(constexpr since C++26)

swap ( ptr_  , nh. ptr_  ) 를 호출합니다. 다음 값들 중 하나라도 true 인 경우, swap ( alloc_  , nh. alloc_  ) 도 호출합니다:

  • ator_traits  :: propagate_on_container_swap
  • ! alloc_
  • ! other. alloc_

다음 값들이 모두 false 인 경우, 동작은 정의되지 않습니다:

  • ator_traits  :: propagate_on_container_swap
  • ! alloc_
  • ! other. alloc_
  • alloc_ == other. alloc_

예외

noexcept 명세:
noexcept ( ator_traits :: propagate_on_container_swap :: value ||
ator_traits :: is_always_equal :: value )

비멤버 함수

std::swap ( node-handle  )

friend void swap ( /*node-handle*/ & lhs, /*node-handle*/ & rhs )
noexcept ( noexcept ( lhs. swap ( rhs ) ) ) ;
(C++26부터 constexpr)

효과적으로 x. swap ( y ) 을 실행합니다.

이 함수는 일반적인 비한정 이름 검색 또는 한정 이름 검색 으로는 보이지 않으며, node-handle 이 인자들의 연관 클래스일 때만 인자 종속 이름 검색 에 의해 찾을 수 있습니다.