std::unordered_multiset<Key,Hash,KeyEqual,Allocator>:: extract
|
node_type extract
(
const_iterator pos
)
;
|
(1) |
(depuis C++17)
(constexpr depuis C++26) |
|
node_type extract
(
const
Key
&
k
)
;
|
(2) |
(depuis C++17)
(constexpr depuis C++26) |
|
template
<
class
K
>
node_type extract ( K && x ) ; |
(3) |
(depuis C++23)
(constexpr depuis C++26) |
Hash
et
KeyEqual
sont tous deux
transparents
, et que ni
iterator
ni
const_iterator
ne sont implicitement convertibles depuis
K
. Cela suppose qu'un tel
Hash
peut être appelé avec à la fois le type
K
et le type
Key
, et que le
KeyEqual
est transparent, ce qui, ensemble, permet d'appeler cette fonction sans construire une instance de
Key
.
Dans les deux cas, aucun élément n'est copié ou déplacé, seuls les pointeurs internes des nœuds du conteneur sont redirigés.
L'extraction d'un nœud n'invalide que les itérateurs pointant vers l'élément extrait, et préserve l'ordre relatif des éléments non effacés. Les pointeurs et références vers l'élément extrait restent valides, mais ne peuvent pas être utilisés tant que l'élément est détenu par un gestionnaire de nœud : ils redeviennent utilisables si l'élément est inséré dans un conteneur.
Table des matières |
Paramètres
| pos | - | un itérateur valide dans ce conteneur |
| k | - | une clé pour identifier le nœud à extraire |
| x | - | une valeur de tout type pouvant être comparée de manière transparente avec une clé identifiant le nœud à extraire |
Valeur de retour
Un node handle qui possède l'élément extrait, ou un node handle vide si l'élément n'est pas trouvé dans (2,3) .
Exceptions
Hash
et
KeyEqual
.
Complexité
Notes
extract est la seule manière de retirer un objet non copiable d'un ensemble :
std::set<move_only_type> s; s.emplace(...); move_only_type mot = std::move(s.extract(s.begin()).value());
` (non traduit selon les instructions) - Termes spécifiques C++ (non traduits selon les instructions) Le code C++ présenté reste donc identique dans la version française.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Effacement hétérogène dans les conteneurs associatifs et les conteneurs associatifs non ordonnés , ( 3 ) |
Exemple
#include <algorithm> #include <iostream> #include <string_view> #include <unordered_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::unordered_multiset<int> cont{1, 2, 3}; print("Start:", cont); // Extract node handle and change key auto nh = cont.extract(1); nh.value() = 4; print("After extract and before insert:", cont); // Insert node handle back cont.insert(std::move(nh)); print("End:", cont); }
Sortie possible :
Start: 1 2 3 After extract and before insert: 2 3 End: 2 3 4
Voir aussi
|
(C++17)
|
fusionne les nœuds d'un autre conteneur
(fonction membre publique) |
|
insère des éléments
ou des nœuds
(depuis C++17)
(fonction membre publique) |
|
|
efface des éléments
(fonction membre publique) |