map::emplace
Wstawia element skonstruowane w miejsce (kopiowania lub przenoszenia nie wykona żadnej czynności) na mapie.
template<class... Args>
pair<iterator, bool> emplace(
Args&&... args);
Parametry
Parametr |
Opis |
args |
Argumenty przekazywane do konstruowania element ma zostać wstawiona do mapy, chyba że już zawiera element, którego wartość równoważnie porządkowania. |
Wartość zwracana
A para których bool składnik jest wartość true, jeśli dokonano wstawiania, a wartość false, jeśli mapa zawiera już element o równoważnej wartości w kolejności.Składnik iteratora zwracanej wartości pary wskazuje na nowo wstawiony element, jeśli składnik bool ma wartość true lub na istniejący element, jeśli składnik bool ma wartość false.
Aby uzyskać dostęp do składnika sterująca z pairpr, użyj pr.first; Aby usunąć odwołania do niego, należy użyć *pr.first.Aby uzyskać dostęp do składnika bool, użyj pr.second.Dla przykładu, zobacz przykładowy kod w dalszej części tego artykułu.
Uwagi
Żadne iteratory ani odwołania nie są unieważniane przez tę funkcję.
Podczas umieszczenia, jeśli zgłoszono wyjątek, stan kontenera nie jest modyfikowany.
value_type elementu jest parą, dzięki czemu wartość elementu będzie uporządkowaną parą z pierwszym składnikiem równym wartości klucza i drugim składnikiem równym wartości danych elementu.
Przykład
// 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;
}
Dane wyjściowe
map modified, now contains 1 elements: (10, ten)
Emplace failed, element with key 10 already exists.
The existing element is (10, ten)
Wymagania
Nagłówek: <map>
Przestrzeń nazw: std