map::emplace
Es wird ein Element eingefügt, das vor Ort in eine Zuordnung konstruiert wird (keine Kopieren- oder Verschiebevorgänge werden ausgeführt).
template<class... Args>
pair<iterator, bool> emplace(
Args&&... args);
Parameter
Parameter |
Beschreibung |
args |
Die Argumente, die zum Erstellen eines in die Zuordnung einzufügenden Elements weitergeleitet werden, es sei denn, es ist bereits ein Element enthalten, dessen Wert gleichwertig sortiert wird. |
Rückgabewert
Ein Paar, dessen bool-Komponente "True" lautet, wenn eine Einfügung erfolgte und "False", wenn in der Zuordnung bereits ein Element des entsprechenden Werts in der Sortierung enthalten war. Die Iteratorkomponente des Rückgabewertpaars zeigt auf das neu eingefügten Element, wenn die bool-Komponente "true" lautet, oder auf das vorhandene Element, wenn die bool-Komponente "false" lautet.
Um auf die Iteratorkomponente eines pair pr-Elements zuzugreifen, verwenden Sie pr.first. Um es zu dereferenzieren, verwenden Sie *pr.first. Um auf die bool-Komponente zuzugreifen, verwenden Sie pr.second. Eine Beispiel finden Sie unter Beispielcode weiter unten in diesem Artikel.
Hinweise
Durch diese Funktion werden keine Iteratoren oder Verweise ungültig.
Wird während des Einbaus eine Ausnahme ausgelöst, wird der Zustand des Containers nicht geändert.
Der value_type eines Elements wird paarweise angegeben, sodass der Wert eines Elements ein geordnetes Paar ist, bei dem die erste Komponente gleich dem Schlüsselwert und die zweite Komponente gleich dem Datenwert des Elements ist.
Beispiel
// map_emplace.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: ";
for (const auto& p : m) {
cout << "(" << p.first << ", " << p.second << ") ";
}
cout << endl;
}
int main()
{
map<int, string> m1;
auto ret = m1.emplace(10, "ten");
if (!ret.second){
auto pr = *ret.first;
cout << "Emplace failed, element with key 10 already exists."
<< endl << " The existing element is (" << pr.first << ", " << pr.second << ")"
<< endl;
cout << "map not modified" << endl;
}
else{
cout << "map modified, now contains ";
print(m1);
}
cout << endl;
ret = m1.emplace(10, "one zero");
if (!ret.second){
auto pr = *ret.first;
cout << "Emplace failed, element with key 10 already exists."
<< endl << " The existing element is (" << pr.first << ", " << pr.second << ")"
<< endl;
}
else{
cout << "map modified, now contains ";
print(m1);
}
cout << endl;
}
Ausgabe
map modified, now contains 1 elements: (10, ten)
Emplace failed, element with key 10 already exists.
The existing element is (10, ten)
Anforderungen
Header: <map>
Namespace: std