std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::emplace
| template< class... Args > iterator emplace( Args&&... args ); |
(seit C++11) | |
Fügt ein neues Element in den Container ein, das mit den gegebenen args vor Ort konstruiert wird.
Der Konstruktor des neuen Elements (d. h. std::pair<const Key, T>) wird mit exakt denselben Argumenten aufgerufen, die an emplace übergeben wurden, weitergeleitet über std::forward<Args>(args)....
Eine sorgfältige Verwendung von emplace ermöglicht die Konstruktion des neuen Elements unter Vermeidung unnötiger Kopier- oder Verschiebungsoperationen.
Wenn nach der Operation die neue Anzahl der Elemente größer ist als max_load_factor() * bucket_count(), findet ein Re-Hashing statt.
Wenn Rehashing stattfindet (aufgrund der Einfügung), werden alle Iteratoren ungültig. Andernfalls (kein Rehashing) werden Iteratoren nicht ungültig.
Inhalt |
[bearbeiten] Parameter
| args | - | Argumente, die an den Konstruktor des Elements weitergeleitet werden |
[bearbeiten] Rückgabewert
Ein Iterator zu dem eingefügten Element.
[bearbeiten] Ausnahmen
Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).
[bearbeiten] Komplexität
Im Durchschnitt amortisiert konstant, im schlimmsten Fall linear zur Größe des Containers.
[bearbeiten] Beispiel
#include <iostream> #include <string> #include <utility> #include <unordered_map> int main() { std::unordered_multimap<std::string, std::string> m; // uses pair's move constructor m.emplace(std::make_pair(std::string("a"), std::string("a"))); // uses pair's converting move constructor m.emplace(std::make_pair("b", "abcd")); // uses pair's template constructor m.emplace("d", "ddd"); // emplace with duplicate key m.emplace("d", "DDD"); // uses pair's piecewise constructor m.emplace(std::piecewise_construct, std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c')); for (const auto& p : m) std::cout << p.first << " => " << p.second << '\n'; }
Mögliche Ausgabe
a => a b => abcd c => cccccccccc d => ddd d => DDD
[bearbeiten] Siehe auch
| konstruiert Elemente "in place" unter Verwendung eines Hinweises (public member function) | |
| fügt "in place" ein, wenn der Schlüssel nicht existiert, tut nichts, wenn der Schlüssel existiert (public member function) | |
| fügt Elemente ein oder Knoten(seit C++17) (public member function) |