Namespaces
Variants

node-handle

From cppreference.net
template < /* 未規定 */ >
class /*node-handle*/ ;
(C++17以降)
( 説明専用* )

node handle は、 associative containers および unordered associative containers から単一の要素の所有権を受け入れるオブジェクトです。互換性のあるノードを持つ別のコンテナにその所有権を転送するために使用できます。

ノードハンドルには2つの可能な状態があります:

  • コンテナから抽出された要素を指す、または
  • empty  である。

ノードハンドルが空でない場合、それは以前に抽出されたコンテナのアロケータと等しいアロケータを含んでいます。

すべてのマップコンテナ( std::map std::multimap std::unordered_map および std::unordered_multimap )において、 key_type Key であり、 mapped_type T である場合、ノードハンドルを含む操作の動作は、 std::pair のユーザー定義特殊化が std:: pair < Key, T > または std:: pair < const Key, T > に対して存在する場合、未定義となります。

目次

ネストされた型

定義
key_type (mapコンテナのみ) ノードに格納されるキー
mapped_type (mapコンテナのみ) ノードに格納される要素のマップされた部分
value_type (setコンテナのみ) ノードに格納される要素
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_ でムーブ構築されます。
  • other. ptr_ nullptr を代入します。
  • other. ptr_ std:: nullopt を代入します。

パラメータ

other - 別のnode handle

注記

ユーザー提供のコピーコンストラクタはありません。 node-handle CopyConstructible ではありません。

ムーブ構築とムーブ代入以外では、空でない node-handle は(順序付き/非順序)連想コンテナの extract メンバ関数を呼び出すことによってのみ作成できます。

node-handle  :: operator=

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

ムーブ代入演算子は、 * this の状態を other の状態で置き換えます(ムーブセマンティクスを使用)。

  1. ptr_ ! = nullptr true の場合、 * this が参照する要素を ator_traits  :: destroy を呼び出して破棄し、その後 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 - 別のノードハンドル

戻り値

* this

例外

何もスローしません。

注記

ユーザー提供のコピー代入演算子はありません。 node-handle CopyAssignable ではありません。

node-handle  :: ~ node-handle

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

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)

node handleが空の場合 true を返し、それ以外の場合 false を返します。

戻り値

ptr_ == nullptr

node-handle  :: operator bool

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

node handleが空の場合は false に、それ以外の場合は true に変換します。

戻り値

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 の場合、動作は未定義。

戻り値

上記の通り。

例外

何もスローしない。

node-handle  :: key (map containers only)

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

key_type メンバへの非const参照を返します。これは * this によって参照される要素のものです。

empty ( ) true の場合、動作は未定義です。

戻り値

前述の通り。

例外

何も送出しません。

注記

この関数により、マップから抽出されたノードのキーを変更し、要素をコピーまたは移動することなくマップに再挿入することが可能になります。

node-handle  :: mapped (map containers only)

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

mapped_type メンバへの参照を返します。これは * this によって参照される要素のものです。

empty ( ) true の場合、動作は未定義です。

戻り値

前述の通り。

例外

何も送出しません。

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 ) ) ) ;
(constexpr since C++26)

実質的に x. swap ( y ) を実行します。

この関数は通常の 非修飾名探索 または 修飾名探索 では可視化されず、 node-handle が引数の関連クラスである場合にのみ 実引数依存探索 によって発見されます。