std::set<Key,Compare,Allocator>:: extract
From cppreference.net
|
node_type extract
(
const_iterator pos
)
;
|
(1) |
(C++17부터)
(C++26부터 constexpr) |
|
node_type extract
(
const
Key
&
k
)
;
|
(2) |
(C++17부터)
(C++26부터 constexpr) |
|
template
<
class
K
>
node_type extract ( K && x ) ; |
(3) |
(C++23부터)
(C++26부터 constexpr) |
2,3)
컨테이너에 키가
k
또는
x
(C++23부터)
와 동등한 요소가 있으면, 해당 요소를 포함하는 노드를 컨테이너에서 연결 해제하고 이를 소유하는
node handle
을 반환합니다. 그렇지 않으면 빈 node handle을 반환합니다.
3)
이 오버로드는
Compare
가
transparent
이고,
iterator
와
const_iterator
모두
K
에서 암시적으로 변환되지 않는 경우에만 오버로드 해결에 참여합니다. 이를 통해
Key
인스턴스를 생성하지 않고 이 함수를 호출할 수 있습니다.
어떤 경우든, 요소들이 복사되거나 이동되지 않으며 컨테이너 노드의 내부 포인터들만 재지정됩니다 ( erase() 에서와 같이 재균형이 발생할 수 있습니다).
노드를 추출하면 추출된 요소에 대한 반복자만 무효화됩니다. 추출된 요소에 대한 포인터와 참조는 유효하게 유지되지만, 요소가 노드 핸들에 의해 소유되는 동안에는 사용할 수 없습니다: 요소가 컨테이너에 삽입되면 사용 가능해집니다.
목차 |
매개변수
| pos | - | 이 컨테이너의 유효한 반복자 |
| k | - | 추출할 노드를 식별하는 키 |
| x | - | 추출할 노드를 식별하는 키와 투명하게 비교될 수 있는 임의 타입의 값 |
반환값
추출된 요소를 소유하는 node handle 이며, 요소가 (2,3) 에서 발견되지 않을 경우 빈 node handle입니다.
예외
1)
아무것도 던지지 않습니다.
2,3)
Compare
객체에 의해 발생하는 모든 예외.
복잡도
1)
분할 상환 상수 시간.
2,3)
log(
size()
)
참고 사항
extract는 이동 전용 객체를 집합에서 꺼내는 유일한 방법입니다:
std::set<move_only_type> s; s.emplace(...); move_only_type mot = std::move(s.extract(s.begin()).value());
| Feature-test 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | 연관 컨테이너 및 비순차 연관 컨테이너 에서의 이종 삭제, ( 3 ) |
예제
이 코드 실행
#include <algorithm> #include <iostream> #include <string_view> #include <set> void print(std::string_view comment, const auto& data) { std::cout << comment; for (auto datum : data) std::cout << ' ' << datum; std::cout << '\n'; } int main() { std::set<int> cont{1, 2, 3}; print("Start:", cont); // 노드 핸들 추출 및 키 변경 auto nh = cont.extract(1); nh.value() = 4; print("After extract and before insert:", cont); // 노드 핸들 다시 삽입 cont.insert(std::move(nh)); print("End:", cont); }
출력:
Start: 1 2 3 After extract and before insert: 2 3 End: 2 3 4
참고 항목
|
(C++17)
|
다른 컨테이너로부터 노드를 연결
(public member function) |
|
요소 삽입
또는 노드
(C++17부터)
(public member function) |
|
|
요소 삭제
(public member function) |