Namespaces
Variants

node-handle

From cppreference.net
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 > .

Contenidos

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 ator_traits  :: template
rebind_traits < container_node_type  > :: pointer

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* )
  1. 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)
1) El constructor por defecto inicializa el node handle al estado vacío.
2) El constructor de movimiento toma posesión del elemento del contenedor de other .
  • 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.

  1. Si ptr_ ! = nullptr es true , destruye el elemento referenciado por * this llamando a ator_traits  :: destroy , luego desasigna el almacenamiento para el elemento referenciado llamando a ator_traits  :: rebind_traits < container-node-type  > :: deallocate .
  2. Asigna other. ptr_ a ptr_ .
  3. Si ator_traits  :: propagate_on_container_move_assignment es true , asigna por movimiento other. alloc_ a alloc_ .
  4. 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

noexcept especificación:
noexcept ( ator_traits :: propagate_on_container_swap :: value ||
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.