node-handle
|
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
ptr_
|
参照されるオブジェクトを含むコンテナノードへのポインタ
[1]
( 説明専用メンバーオブジェクト* ) |
std::
optional
<
allocator_type
>
alloc_
|
格納されたアロケータ
( 説明専用メンバーオブジェクト* ) |
- ↑ 要素を抽出する際に、指し示すコンテナノードの所有権は既にソースコンテナから切り離されています。ソースコンテナのライフタイムが終了した場合でも、コンテナノードと含まれる要素には引き続きアクセス可能です。
メンバー関数
node-handle :: node-handle
|
constexpr
/*node-handle*/
(
)
noexcept
;
|
(1) | |
|
/*node-handle*/
(
/*node-handle*/
&&
other
)
noexcept
;
|
(2) | (constexpr since C++26) |
-
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 の状態で置き換えます(ムーブセマンティクスを使用)。
-
ptr_! = nullptr が true の場合、 * this が参照する要素をator_traits :: destroy を呼び出して破棄し、その後ator_traits :: rebind_traits <container-node-type > :: deallocate を呼び出して参照要素のストレージを解放します。 -
other.
ptr_をptr_に代入します。 -
ator_traits :: propagate_on_container_move_assignment が true の場合、 other.alloc_をalloc_にムーブ代入します。 -
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_
例外
ator_traits :: is_always_equal :: value )