Home C&C++函数库 c++ 语法 程序源码 Linux C库

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 删除元素(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图