Namespaces
Variants

node-handle

From cppreference.net
template < /* unspecified */ >
class /*node-handle*/ ;
(depuis C++17)
( exposition uniquement* )

Un node handle est un objet qui accepte la propriété d'un seul élément d'un conteneur associatif et d'un conteneur associatif non ordonné . Il peut être utilisé pour transférer cette propriété à un autre conteneur avec des nœuds compatibles.

Un gestionnaire de nœud a deux états possibles :

  • Il fait référence à un élément extrait d'un conteneur, ou
  • il est empty  .

Si un gestionnaire de nœud n'est pas vide, alors il contient un allocateur qui est égal à l'allocateur du conteneur précédemment extrait.

Pour tous les conteneurs de type map ( std::map , std::multimap , std::unordered_map , et std::unordered_multimap ) dont le key_type est Key et le mapped_type est T , le comportement des opérations impliquant des node handles est indéfini si une spécialisation définie par l'utilisateur de std::pair existe pour std:: pair < Key, T > ou std:: pair < const Key, T > .

Table des matières

Types imbriqués

Type Définition
key_type (conteneurs de map uniquement) la clé stockée dans le nœud
mapped_type (conteneurs de map uniquement) la partie mappée de l'élément stocké dans le nœud
value_type (conteneurs de set uniquement) l'élément stocké dans le nœud
allocator_type l'allocateur à utiliser lors de la destruction de l'élément
container_node_type non spécifié
( type membre d'exposition uniquement* )
ator_traits std:: allocator_traits < allocator_type >
( type membre d'exposition uniquement* )

Voir AssociativeContainer et UnorderedAssociativeContainer pour les définitions réelles des types imbriqués non-expositionnels.

Membres de données

Membre Description

typename ator_traits  :: template
rebind_traits < container_node_type  > :: pointer

ptr_
un pointeur vers un nœud de conteneur contenant l'objet référencé [1]
( objet membre d'exposition uniquement* )
std:: optional < allocator_type > alloc_ l'allocateur stocké
( objet membre d'exposition uniquement* )
  1. La propriété du nœud de conteneur pointé a déjà été détachée du conteneur source lors de l'extraction de l'élément. Même si la durée de vie du conteneur source a pris fin, le nœud de conteneur et l'élément contenu restent accessibles.

Fonctions membres

node-handle  :: node-handle

constexpr /*node-handle*/ ( ) noexcept ;
(1)
/*node-handle*/ ( /*node-handle*/ && other ) noexcept ;
(2) (constexpr depuis C++26)
1) Le constructeur par défaut initialise le gestionnaire de nœud à l'état vide.
2) Le constructeur de déplacement prend possession de l'élément du conteneur depuis other .
  • ptr_ est initialisé avec other. ptr_ .
  • alloc_ est construit par déplacement avec other. alloc_ .
  • Affecte nullptr à other. ptr_ .
  • Affecte std:: nullopt à other. ptr_ .

Paramètres

other - un autre gestionnaire de nœud

Notes

Il n'y a pas de destructeur de copie fourni par l'utilisateur. node-handle n'est pas CopyConstructible .

En plus de la construction et de l'affectation par déplacement, un node-handle non vide ne peut être créé qu'en appelant les fonctions membres extract des conteneurs associatifs (non ordonnés).

node-handle  :: operator=

/*node-handle*/ & operator = ( /*node-handle*/ && other ) ;
(constexpr depuis C++26)

L'opérateur d'affectation par déplacement remplace l'état de * this par l'état de other en utilisant la sémantique de déplacement.

  1. Si ptr_ ! = nullptr est true , détruit l'élément référencé par * this en appelant ator_traits  :: destroy , puis désalloue le stockage pour l'élément référencé en appelant ator_traits  :: rebind_traits < container-node-type  > :: deallocate .
  2. Affecte other. ptr_ à ptr_ .
  3. Si ator_traits  :: propagate_on_container_move_assignment est true , affecte par déplacement other. alloc_ à alloc_ .
  4. Affecte nullptr à other. ptr_ et affecte std:: nullopt à other. alloc_ .

Si les valeurs suivantes sont toutes false , le comportement est indéfini :

  • ator_traits  :: propagate_on_container_move_assignment
  • ! alloc_
  • alloc_ == other. alloc_

Paramètres

other - un autre node handle

Retour

* this

Exceptions

Ne lance rien.

Notes

Il n'y a pas d'opérateur d'affectation par copie fourni par l'utilisateur. node-handle n'est pas CopyAssignable .

node-handle  :: ~ node-handle

~ /*node-handle*/ ( ) ;
(constexpr depuis C++26)

Si ptr_ ! = nullptr est true , détruit l'élément référencé par * this en appelant ator_traits  :: destroy , puis désalloue l'élément du conteneur en appelant ator_traits  :: rebind_traits < container-node-type  > :: deallocate .

Sinon, ne fait rien.

node-handle  :: empty

bool empty ( ) const noexcept ;
(constexpr depuis C++26)

Retourne true si le node handle est vide, false sinon.

Valeur de retour

ptr_ == nullptr

node-handle  :: operator bool

explicit operator bool ( ) const noexcept ;
(constexpr depuis C++26)

Convertit en false si le node handle est vide, true sinon.

Valeur de retour

ptr_ ! = nullptr

node-handle  :: get_allocator

allocator_type get_allocator ( ) const ;
(constexpr depuis C++26)

Retourne une copie de l'allocateur stocké.

Si empty ( ) est true , le comportement est indéfini.

Valeur de retour

* alloc_

Exceptions

Ne lance rien.

node-handle  :: value (conteneurs set uniquement)

value_type & value ( ) const ;
(constexpr depuis C++26)

Retourne une référence à l'élément référencé par * this .

Si empty ( ) est true , le comportement est indéfini.

Valeur de retour

Comme décrit ci-dessus.

Exceptions

Ne lance rien.

node-handle  :: key (conteneurs map uniquement)

key_type & key ( ) const ;
(constexpr depuis C++26)

Retourne une référence non constante au membre key_type de l'élément référencé par * this .

Si empty ( ) est true , le comportement est indéfini.

Valeur de retour

Comme décrit ci-dessus.

Exceptions

Ne lance rien.

Notes

Cette fonction permet de modifier la clé d'un nœud extrait d'une map, puis de le réinsérer dans la map, sans jamais copier ni déplacer l'élément.

node-handle  :: mapped (conteneurs map uniquement)

mapped_type & mapped ( ) const ;
(constexpr depuis C++26)

Retourne une référence au membre mapped_type de l'élément référencé par * this .

Si empty ( ) est true , le comportement est indéfini.

Valeur de retour

Comme décrit ci-dessus.

Exceptions

Ne lance rien.

node-handle  :: swap

void swap ( /*node-handle*/ & other ) noexcept ( /* voir ci-dessous */ ) ;
(constexpr depuis C++26)

Appelle swap ( ptr_  , nh. ptr_  ) . Si l'une des valeurs suivantes est true , appelle également swap ( alloc_  , nh. alloc_  ) :

  • ator_traits  :: propagate_on_container_swap
  • ! alloc_
  • ! other. alloc_

Si toutes les valeurs suivantes sont false , le comportement est indéfini :

  • ator_traits  :: propagate_on_container_swap
  • ! alloc_
  • ! other. alloc_
  • alloc_ == other. alloc_

Exceptions

noexcept spécification :
noexcept ( ator_traits :: propagate_on_container_swap :: value ||
ator_traits :: is_always_equal :: value )

Fonctions non membres

std::swap ( node-handle  )

friend void swap ( /*node-handle*/ & lhs, /*node-handle*/ & rhs )
noexcept ( noexcept ( lhs. swap ( rhs ) ) ) ;
(constexpr depuis C++26)

Exécute effectivement x. swap ( y ) .

Cette fonction n'est pas visible par la recherche non qualifiée ordinaire ou la recherche qualifiée , et ne peut être trouvée que par la recherche dépendante des arguments lorsque node-handle est une classe associée des arguments.