unordered_map_extract

unordered_map_extract (std::unordered_map::extract — 노드 추출)

std::unordered_map에서 노드를 분리해 노드 핸들(node handle)로 반환하는 멤버 함수예요. 노드 핸들은 같은 해시·동등·할당자를 가진 다른 컨테이너로 이식될 수 있어요.

출처: cppreference

본문

시그니처는 다음과 같아요.

node_type extract( const_iterator position );   // (1) (since C++17)
node_type extract( const Key& k );              // (2) (since C++17)

(1) position이 가리키는 원소를 담고 있는 노드를 연결에서 떼어내고, 그것을 소유하는 node handle을 반환해요.

(2) 컨테이너에 k와 동등한 키를 가진 원소가 있으면 그 원소를 담고 있는 노드를 컨테이너에서 떼어내고 node handle을 반환해요. 없으면 빈 node handle을 반환해요.

추출한 노드의 키는 변경할 수 있어요.

매개변수

  • position: 추출할 유효한 이터레이터
  • k: 추출할 원소의 키

반환값

추출된 원소를 소유하는 node handle. 원소가 없으면 빈 node handle.

복잡도

(1) 평균 상수. (2) 평균 상수.

예제

#include <iostream>
#include <unordered_map>
int main()
{
    std::unordered_map<int, char> m{{1, 'a'}, {2, 'b'}};
    auto nh = m.extract(2);
    nh.key() = 9;                 // 키 변경
    m.insert(std::move(nh));      // 다시 삽입
    for (auto& [k, v] : m) std::cout << k << ' ';
}

더 알아보기 (Learn more)

cppreference