GeezerVison is showing cpprefjp.github.io — node_handle - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
class template
node_handle (C++17)
template < unspecified >
class node_handle ;
概要
クラスnode_handleの名前は未規定 だが、説明のために名前node_handleを用いる。
ノードハンドルは、連想コンテナstd::set 、std::multiset 、std::map 、std::multimap またはunordered連想コンテナstd::unordered_set 、std::unordered_multiset 、std::unordered_map 、std::unordered_multimap から単一要素の所有権を受け取るオブジェクトである。
互換性のあるノードを持つ別のコンテナにその所有権を移すために使用される。
互換性のあるノードを持つコンテナは、同じノードハンドル型を持つ。
要素は、次の表の同じ行にあるコンテナ型間でどちらの方向にも転送できる。
map<K, T, C1, A>
map<K, T, C2, A>
map<K, T, C1, A>
multimap<K, T, C2, A>
set<K, C1, A>
set<K, C2, A>
set<K, C1, A>
multiset<K, C2, A>
unordered_map<K, T, H1, E1, A>
unordered_map<K, T, H2, E2, A>
unordered_map<K, T, H1, E1, A>
unordered_multimap<K, T, H2, E2, A>
unordered_set<K, H1, E1, A>
unordered_set<K, H2, E2, A>
unordered_set<K, H1, E1, A>
unordered_multiset<K, H2, E2, A>
ノードハンドルが空でない場合は、要素が抽出されたときのコンテナのアロケータと等しいアロケータが含まれる。ノードハンドルが空の場合、アロケータは含まれない。
key_type を K、 mapped_type を T としたとき、std::pair<K, T>またはstd::pair<const K, T>に対するユーザー定義の特殊化が存在する場合、ノードハンドルを用いる操作は未定義動作 を引き起こす。
また、node_handleはムーブオンリーである。
メンバ関数
構築・破棄
オブザーバー
変更
名前
説明
対応バージョン
swap
2つのnode_handleオブジェクトを入れ替える
C++17
メンバ型
名前
説明
対応バージョン
key_type
テンプレートパラメータ K。
C++17
value_type(set)
テンプレートパラメータ K。
C++17
value_type(map)
要素の型。std::pair <const K, T>。
C++17
mapped_type(map)
値の型。テンプレートパラメータ T。
C++17
allocator_type
アロケータの型。
C++17
非メンバ関数
名前
説明
対応バージョン
swap
2つのnode_handleオブジェクトを入れ替える
C++17
例
#include <iostream>
#include <map>
#include <utility>
int main ()
{
// char をキー、int を値として扱う連想配列
std::map < char , int > m1 , m2 ;
// m1 へ挿入
m1 . insert ( std::make_pair ( 'a' , 10 ));
m1 . insert ( std::make_pair ( 'b' , 20 ));
m1 . insert ( std::make_pair ( 'c' , 30 ));
// ノードを取得(要素は、コピーもムーブもされない)
// なお、node_type は node_handle の特殊化である
std::map < char , int >:: node_type node = m1 . extract ( 'c' );
// m2 へ挿入(要素は、コピーもムーブもされない)
m2 . insert ( std :: move ( node ));
std::cout << "m1 :" << std::endl ;
for ( const auto & [ key , value ] : m1 )
std::cout << "[" << key << ", " << value << "]" << std::endl ;
std::cout << " \n " << "m2 :" << std::endl ;
for ( const auto & [ key , value ] : m2 )
std::cout << "[" << key << ", " << value << "]" << std::endl ;
}
出力
m1 :
[a, 10]
[b, 20]
m2 :
[c, 30]
バージョン
言語
処理系
関連項目
参照