std::unordered_set<Key,Hash,KeyEqual,Allocator>:: extract
|
node_type extract
(
const_iterator pos
)
;
|
(1) |
(seit C++17)
(constexpr seit C++26) |
|
node_type extract
(
const
Key
&
k
)
;
|
(2) |
(seit C++17)
(constexpr seit C++26) |
|
template
<
class
K
>
node_type extract ( K && x ) ; |
(3) |
(seit C++23)
(constexpr seit C++26) |
Hash
und
KeyEqual
beide
transparent
sind und weder
iterator
noch
const_iterator
implizit von
K
konvertierbar ist. Dies setzt voraus, dass ein solcher
Hash
sowohl mit dem Typ
K
als auch mit dem Typ
Key
aufrufbar ist und dass
KeyEqual
transparent ist, was zusammen den Aufruf dieser Funktion ermöglicht, ohne eine Instanz von
Key
zu konstruieren.
In beiden Fällen werden keine Elemente kopiert oder verschoben, nur die internen Zeiger der Container-Knoten werden neu ausgerichtet.
Das Extrahieren eines Knotens invalidisiert nur die Iteratoren auf das extrahierte Element und bewahrt die relative Reihenfolge der nicht gelöschten Elemente. Zeiger und Referenzen auf das extrahierte Element bleiben gültig, können jedoch nicht verwendet werden, während das Element im Besitz eines Knotenhandles ist: Sie werden wieder verwendbar, wenn das Element in einen Container eingefügt wird.
Inhaltsverzeichnis |
Parameter
| pos | - | ein gültiger Iterator in diesem Container |
| k | - | ein Schlüssel zur Identifizierung des zu extrahierenden Knotens |
| x | - | ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann, der den zu extrahierenden Knoten identifiziert |
Rückgabewert
Ein Node Handle , das das extrahierte Element besitzt, oder ein leerer Node Handle, falls das Element in (2,3) nicht gefunden wurde.
Exceptions
Hash
- und
KeyEqual
-Objekt ausgelöst werden.
Komplexität
Hinweise
extract ist die einzige Möglichkeit, ein Move-Only-Objekt aus einem set zu entnehmen:
std::set<move_only_type> s; s.emplace(...); move_only_type mot = std::move(s.extract(s.begin()).value());
| Feature-Test Makro | Wert | Std | Funktion |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Heterogenes Löschen in assoziativen Containern und ungeordneten assoziativen Containern , ( 3 ) |
Beispiel
#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_set<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); }
Mögliche Ausgabe:
Start: 1 2 3 After extract and before insert: 2 3 End: 2 3 4
Siehe auch
|
(C++17)
|
verbindet Knoten aus einem anderen Container
(öffentliche Elementfunktion) |
|
fügt Elemente ein
oder Knoten
(seit C++17)
(öffentliche Elementfunktion) |
|
|
löscht Elemente
(öffentliche Elementfunktion) |