std::
multiset::emplace
公众成员函数 <set>
template <class... Args>
iterator emplace (Args&&... args);
构造并插入元素
在
multiset 中插入一个新元素(如果唯一的话)。这个新元素是使用
args作为其构造的参数构造.
这样可以有效地将容器的大小增加1.
在内部,
multiset容器按照其比较对象指定的标准对其所有元素排序。元素总是按照这种顺序插入到其各自的位置。
通过调用
allocator_traits::construct并传递
args来构造元素。
C++98:不能保证等效元素的相对顺序。
C++11:等价元素的相对顺序保持不变,新插入的元素跟随着容器中已经存在的等价元素。
存在一个类似的成员函数
insert,它复制或移动现有的对象到容器中。
☲ 参数
-
args
-
用于构造新元素的参数。
☉ 返回值
指向新插入元素的迭代器。
成员类型iterator是指向元素的双向迭代器类型。
☣ 示例
// multiset::emplace
#include <iostream>
#include <set>
#include <string>
int main ()
{
std::multiset<std::string> mymultiset;
mymultiset.emplace("foo");
mymultiset.emplace("bar");
mymultiset.emplace("foo");
std::cout << "mymultiset contains:";
for (const std::string& x: mymultiset)
std::cout << ' ' << x;
std::cout << '\n';
return 0;
} |
输出:
mymultiset contains: bar foo foo
✥ 复杂度
容器大小的对数。
☣ 迭代器的有效性
不变.
⇄ 数据竞争
容器被修改。
并发地访问现有元素是安全的,但迭代容器中的范围则不安全。
☂ 异常安全性
强保证:如果抛出异常,容器中不会有任何变化。
如果
allocator_traits::construct不支持相应的参数,它会导致未定义行为。
🍄 另请参阅
multiset::emplace_hint |
构造插入元素并加提示(公众成员函数) |
multiset::insert |
插入元素(公众成员函数) |
multiset::erase |
删除元素(公众成员函数) |