GeezerVison is showing cpprefjp.github.io — std::unordered_map::extract - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function
<unordered_map>
std:: unordered_map:: extract (C++17)
node_type extract ( const_iterator position ); // (1) C++17
constexpr node_type extract ( const_iterator position ); // (1) C++26
node_type extract ( const key_type & x ); // (2) C++17
constexpr node_type extract ( const key_type & x ); // (2) C++26
概要
(1) positionが指すノードを切り離し、その要素を所有するノードハンドル を返す。
(2) xと等価なキーが見つかった場合、xが指すノードを切り離し、その要素を所有するノードハンドルを返す。それ以外の場合は空のノードハンドルを返す。
戻り値
要素を所有するノードハンドル。ただし、オーバーロード(2)の場合は空のノードハンドルの可能性がある。
計算量
(1), (2) : 平均的なケースでは定数(O(1))だが、最悪のケースではコンテナの要素数に比例(O(size ()))
備考
extractは、要素に対するコピーもムーブも行わずに、要素の所有権を転送することができる。
また、extractは再確保なしでマップ要素のキーを変更することができる。
例
#include <iostream>
#include <unordered_map>
#include <utility>
int main ()
{
std::unordered_map < int , char > m1 ;
std::unordered_map < int , char > m2 = {
{ 10 , 'a' },
{ 20 , 'b' },
{ 30 , 'c' }
};
// ノードを取得
std::unordered_map < int , char >:: node_type node = m2 . extract ( 10 );
// キーを書き換え
node . key () = 15 ;
// ノードを転送
m1 . 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 :
[15, a]
m2 :
[30, c]
[20, b]
バージョン
言語
処理系
関連項目
参照