map::emplace
Вставляет элемент построен на месте (отсутствует операции копирования или перемещения не выполняется) в сопоставление.
template<class... Args>
pair<iterator, bool> emplace(
Args&&... args);
Параметры
Параметр |
Описание |
args |
Аргументы переадресованные для построения элемента, который необходимо вставить в сопоставление еще не содержит элемент, значение которого соответствующе приказано. |
Возвращаемое значение
pair, компонент bool значение true, если вставка была создана, и значение false, если сопоставление уже содержит элемент соответствующего значения в заказ. Компонент итератора пар возвращаемого значения указывает на вновь изменять элемент bool значение true, если компонент или на существующий элемент, если компонент bool ложен.
Чтобы получить компонент итератора pairpr используйте pr.first; для его разыменования, используйте *pr.first. Чтобы получить компонент bool используйте pr.second. См. пример, приведенный ниже в данном разделе.
Заметки
Нет итераторы или ссылки является действительным этой функцией.
Во время emplacement, если исключение, не изменяется состояние контейнера.
value_type элемента пары, так как значение элемента будет приказанными парами с первым компонентом, значение ключа и вторым компонентом, к данным значение элемента.
Пример
// 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;
}
Output
map modified, now contains 1 elements: (10, ten)
Emplace failed, element with key 10 already exists.
The existing element is (10, ten)
Требования
Заголовок:<map>
Пространство имен: std