std::set<Key,Compare,Allocator>:: extract
|
node_type extract
(
const_iterator pos
)
;
|
(1) |
(desde C++17)
(constexpr desde C++26) |
|
node_type extract
(
const
Key
&
k
)
;
|
(2) |
(desde C++17)
(constexpr desde C++26) |
|
template
<
class
K
>
node_type extract ( K && x ) ; |
(3) |
(desde C++23)
(constexpr desde C++26) |
Compare
es
transparent
, y ni
iterator
ni
const_iterator
son convertibles implícitamente desde
K
. Permite llamar a esta función sin construir una instancia de
Key
.
En cualquier caso, no se copian ni mueven elementos, solo se redirigen los punteros internos de los nodos del contenedor (puede ocurrir un rebalanceo, como con erase() ).
Extraer un nodo solo invalida los iteradores al elemento extraído. Los punteros y referencias al elemento extraído permanecen válidos, pero no pueden usarse mientras el elemento es propiedad de un node handle: se vuelven utilizables si el elemento se inserta en un contenedor.
Contenidos |
Parámetros
| pos | - | un iterador válido dentro de este contenedor |
| k | - | una clave para identificar el nodo a extraer |
| x | - | un valor de cualquier tipo que pueda compararse de forma transparente con una clave que identifique el nodo a extraer |
Valor de retorno
Un node handle que posee el elemento extraído, o un node handle vacío en caso de que el elemento no se encuentre en (2,3) .
Excepciones
Compare
.
Complejidad
Notas
extract es la única forma de sacar un objeto de solo movimiento de un conjunto:
std::set<move_only_type> s; s.emplace(...); move_only_type mot = std::move(s.extract(s.begin()).value());
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Borrado heterogéneo en contenedores asociativos y contenedores asociativos no ordenados , ( 3 ) |
Ejemplo
#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); // Extraer manejador de nodo y cambiar clave auto nh = cont.extract(1); nh.value() = 4; print("After extract and before insert:", cont); // Insertar manejador de nodo nuevamente cont.insert(std::move(nh)); print("End:", cont); }
Salida:
Start: 1 2 3 After extract and before insert: 2 3 End: 2 3 4
Véase también
|
(C++17)
|
fusiona nodos de otro contenedor
(función miembro pública) |
|
inserta elementos
o nodos
(desde C++17)
(función miembro pública) |
|
|
elimina elementos
(función miembro pública) |