GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • cpprefjp - C++日本語リファレンス
  • GitHub Project

This view

  • Original page
  • New address

GeezerVison is showing cpprefjp.github.io — std::unordered_map::extract - cpprefjp C++日本語リファレンス

  1. リファレンス
  2. unordered_map
  3. unordered_map
  4. extract

最終更新日時: 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]

バージョン

言語

  • C++17

処理系

  • Clang: 7.0.0 ✅
  • GCC: 7.1.0 ✅
  • Visual C++: 2017 Update 5 ✅

関連項目

  • node_handle

参照

  • Splicing Maps and Sets(Revision 5)
  • P3372R3 constexpr containers and adaptors
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.