map::emplace
Vloží prvek vytvořený na místě (nejsou provedeny žádné operace kopírování nebo přesunutí) do objektu map.
template<class... Args>
pair<iterator, bool> emplace(
Args&&... args);
Parametry
Parametr |
Popis |
args |
Argumenty předané k vytvoření prvku, který má být vložen do objektu map, pokud již neobsahuje prvek, jehož hodnota je ekvivalentně seřazená. |
Vrácená hodnota
Objekt pair jehož komponenta bool je true, pokud bylo provedeno vložení, a false, pokud objekt map již obsahuje prvek s ekvivalentní hodnotou v pořadí.Komponenta iterátoru dvojice návratové hodnoty odkazuje na nově vložený prvek, pokud má komponenta bool hodnotu true nebo na existující prvek, pokud má komponenta bool hodnotu false.
Chcete-li přistupovat ke komponentě iterátoru objektu pairpr, použijte pr.first. Chcete-li k němu přistoupit přes ukazatel, použijte *pr.first.Chcete-li přistupovat ke komponentě bool použijte pr.second.Příklad naleznete v ukázce kódu dále v tomto článku.
Poznámky
Touto funkcí nejsou zneplatněny žádné iterátory nebo odkazy.
Pokud je během umístění vyvolána výjimka, není stav kontejneru změněn.
Objekt value_type prvku je objekt pair, takže hodnota prvku bude seřazený pár s první komponentou rovnající se hodnotě klíče a druhou komponentou rovnající se datové hodnotě prvku.
Příklad
// 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;
}
Výsledek
map modified, now contains 1 elements: (10, ten)
Emplace failed, element with key 10 already exists.
The existing element is (10, ten)
Požadavky
Hlavička: <map>
Obor názvů: std