node-handle
|
template
<
/* no especificado */
>
class /*node-handle*/ ; |
(desde C++17)
( solo para exposición* ) |
|
Un node handle es un objeto que acepta la propiedad de un único elemento de un contenedor asociativo y un contenedor asociativo no ordenado . Puede utilizarse para transferir esa propiedad a otro contenedor con nodos compatibles.
Un manejador de nodo tiene dos estados posibles:
- Se refiere a un elemento extraído de un contenedor, o
- está vacío .
Si un manejador de nodo no está vacío, entonces contiene un asignador que es igual al asignador del contenedor previamente extraído.
Para todos los contenedores de mapa (
std::map
,
std::multimap
,
std::unordered_map
, y
std::unordered_multimap
) cuyo
key_type
es
Key
y
mapped_type
es
T
, el comportamiento de las operaciones que involucran manejadores de nodo es indefinido si existe una especialización definida por el usuario de
std::pair
para
std::
pair
<
Key, T
>
o
std::
pair
<
const
Key, T
>
.
Tipos anidados
| Tipo | Definición |
key_type
(solo contenedores map)
|
la clave almacenada en el nodo |
mapped_type
(solo contenedores map)
|
la parte mapeada del elemento almacenado en el nodo |
value_type
(solo contenedores set)
|
el elemento almacenado en el nodo |
allocator_type
|
el asignador que se utilizará al destruir el elemento |
container_node_type
|
no especificado
( tipo de miembro solo para exposición* ) |
ator_traits
|
std::
allocator_traits
<
allocator_type
>
( tipo de miembro solo para exposición* ) |
Consulte AssociativeContainer y UnorderedAssociativeContainer para las definiciones reales de los tipos anidados que no son solo de exposición.
Miembros de datos
| Miembro | Descripción |
|
typename
ptr_
|
un puntero a un nodo de contenedor que contiene el objeto referenciado
[1]
( objeto miembro solo para exposición* ) |
std::
optional
<
allocator_type
>
alloc_
|
el asignador almacenado
( objeto miembro solo para exposición* ) |
- ↑ La propiedad del nodo del contenedor apuntado ya fue desvinculada del contenedor fuente durante la extracción del elemento. Incluso si el tiempo de vida del contenedor fuente ha terminado, el nodo del contenedor y el elemento contenido siguen siendo accesibles.
Funciones miembro
node-handle :: node-handle
|
constexpr
/*node-handle*/
(
)
noexcept
;
|
(1) | |
|
/*node-handle*/
(
/*node-handle*/
&&
other
)
noexcept
;
|
(2) | (constexpr since C++26) |
-
ptr_se inicializa con other.ptr_. -
alloc_se construye por movimiento con other.alloc_. -
Asigna
nullptr
a
other.
ptr_. -
Asigna
std::
nullopt
a
other.
ptr_.
Parámetros
| other | - | otro node handle |
Notas
No hay un destructor de copia proporcionado por el usuario.
node-handle
no es
CopyConstructible
.
Además de la construcción por movimiento y asignación por movimiento, un
node-handle
no vacío solo puede crearse llamando a las funciones miembro
extract
de los contenedores asociativos (no ordenados).
node-handle :: operator=
|
/*node-handle*/
&
operator
=
(
/*node-handle*/
&&
other
)
;
|
(constexpr since C++26) | |
El operador de asignación de movimiento reemplaza el estado de * this con el estado de other usando semántica de movimiento.
-
Si
ptr_! = nullptr es true , destruye el elemento referenciado por * this llamando aator_traits :: destroy , luego desasigna el almacenamiento para el elemento referenciado llamando aator_traits :: rebind_traits <container-node-type > :: deallocate . -
Asigna
other.
ptr_aptr_. -
Si
ator_traits :: propagate_on_container_move_assignment es true , asigna por movimiento other.alloc_aalloc_. -
Asigna
nullptr
a
other.
ptr_y asigna std:: nullopt a other.alloc_.
Si todos los siguientes valores son false , el comportamiento es indefinido:
-
ator_traits :: propagate_on_container_move_assignment -
!
alloc_ -
alloc_== other.alloc_
Parámetros
| other | - | otro manejador de nodo |
Valor de retorno
* this
Excepciones
No lanza nada.
Notas
No hay un operador de asignación de copia proporcionado por el usuario.
node-handle
no es
CopyAssignable
.
node-handle :: ~ node-handle
|
~
/*node-handle*/
(
)
;
|
(constexpr desde C++26) | |
Si
ptr_
!
=
nullptr
es
true
, destruye el elemento referenciado por
*
this
llamando a
ator_traits
::
destroy
, luego desasigna el elemento del contenedor llamando a
ator_traits
::
rebind_traits
<
container-node-type
>
::
deallocate
.
De lo contrario, no hace nada.
node-handle :: empty
|
bool
empty
(
)
const
noexcept
;
|
(constexpr desde C++26) | |
Devuelve true si el node handle está vacío, false en caso contrario.
Valor de retorno
ptr_
==
nullptr
node-handle :: operator bool
|
explicit
operator
bool
(
)
const
noexcept
;
|
(constexpr desde C++26) | |
Convierte a false si el node handle está vacío, true en caso contrario.
Valor de retorno
ptr_
!
=
nullptr
node-handle :: get_allocator
|
allocator_type get_allocator
(
)
const
;
|
(constexpr desde C++26) | |
Devuelve una copia del asignador almacenado.
Si empty ( ) es true , el comportamiento es indefinido.
Valor de retorno
*
alloc_
Excepciones
No lanza nada.
node-handle :: value (solo para contenedores set)
|
value_type
&
value
(
)
const
;
|
(constexpr desde C++26) | |
Devuelve una referencia al elemento referenciado por * this .
Si empty ( ) es true , el comportamiento es indefinido.
Valor de retorno
Como se describe anteriormente.
Excepciones
No lanza nada.
node-handle :: key (map containers only)
|
key_type
&
key
(
)
const
;
|
(constexpr desde C++26) | |
Devuelve una referencia no constante al miembro
key_type
del elemento referenciado por
*
this
.
Si empty ( ) es true , el comportamiento es indefinido.
Valor de retorno
Como se describe anteriormente.
Excepciones
No lanza nada.
Notas
Esta función permite modificar la clave de un nodo extraído de un mapa, y luego reinsertarlo en el mapa, sin copiar ni mover nunca el elemento.
node-handle :: mapped (solo para contenedores map)
|
mapped_type
&
mapped
(
)
const
;
|
(constexpr desde C++26) | |
Devuelve una referencia al miembro
mapped_type
del elemento referenciado por
*
this
.
Si empty ( ) es true , el comportamiento es indefinido.
Valor de retorno
Como se describe anteriormente.
Excepciones
No lanza nada.
node-handle :: swap
|
void
swap
(
/*node-handle*/
&
other
)
noexcept
(
/* see below */
)
;
|
(constexpr desde C++26) | |
Llama a
swap
(
ptr_
, nh.
ptr_
)
. Si alguno de los siguientes valores es
true
, también llama a
swap
(
alloc_
, nh.
alloc_
)
:
-
ator_traits :: propagate_on_container_swap -
!
alloc_ -
!
other.
alloc_
Si todos los siguientes valores son false , el comportamiento es indefinido:
-
ator_traits :: propagate_on_container_swap -
!
alloc_ -
!
other.
alloc_ -
alloc_== other.alloc_
Excepciones
ator_traits :: is_always_equal :: value )
Funciones no miembro
std::swap ( node-handle )
|
friend
void
swap
(
/*node-handle*/
&
lhs,
/*node-handle*/
&
rhs
)
noexcept ( noexcept ( lhs. swap ( rhs ) ) ) ; |
(constexpr desde C++26) | |
Efectivamente ejecuta x. swap ( y ) .
Esta función no es visible para la
búsqueda no calificada
ordinaria o la
búsqueda calificada
, y solo puede ser encontrada mediante
búsqueda dependiente de argumentos
cuando
node-handle
es una clase asociada de los argumentos.