set::emplace
Вставляет элемент построен на месте (не выполняются никакие операции копирования или перемещения).
template<class... Args>
pair<iterator, bool> emplace(
Args&&... args
);
Параметры
Параметр |
Описание |
args |
Аргументы переадресованные для построения элемента, который необходимо вставить в набор, если он еще не содержит элемент, значение которого соответствующе приказано. |
Возвращаемое значение
pair которого компонент bool возвращает значение true, если вставка была создана, и значение false, если сопоставление уже содержит элемент, значение которого находится в соответствующее значение в заказ. Компонент итератора пар возвращаемого значения возвращает адрес, новый элемент был представлен (если компонент bool оказывается) или где элемент уже был указан, то (если компонент bool ложен).
Заметки
Нет итераторы или ссылки является действительным этой функцией.
Во время emplacement, если исключение, не изменяется состояние контейнера.
Пример
// set_emplace.cpp
// compile with: /EHsc
#include <set>
#include <string>
#include <iostream>
using namespace std;
template <typename S> void print(const S& s) {
cout << s.size() << " elements: ";
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
set<string> s1;
auto ret = s1.emplace("ten");
if (!ret.second){
cout << "Emplace failed, element with value \"ten\" already exists."
<< endl << " The existing element is (" << *ret.first << ")"
<< endl;
cout << "set not modified" << endl;
}
else{
cout << "set modified, now contains ";
print(s1);
}
cout << endl;
ret = s1.emplace("ten");
if (!ret.second){
cout << "Emplace failed, element with value \"ten\" already exists."
<< endl << " The existing element is (" << *ret.first << ")"
<< endl;
}
else{
cout << "set modified, now contains ";
print(s1);
}
cout << endl;
}
Output
set modified, now contains 1 elements: (ten)
Emplace failed, element with value "ten" already exists.
The existing element is (ten)
Требования
Заголовок:<set>
Пространство имен: std