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 << ' ';
}