node-handle
|
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
>
.
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
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* ) |
- ↑ 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) |
-
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.
-
Si
ptr_! = nullptr est true , détruit l'élément référencé par * this en appelantator_traits :: destroy , puis désalloue le stockage pour l'élément référencé en appelantator_traits :: rebind_traits <container-node-type > :: deallocate . -
Affecte
other.
ptr_àptr_. -
Si
ator_traits :: propagate_on_container_move_assignment est true , affecte par déplacement other.alloc_àalloc_. -
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
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.