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

std::

set::emplace

公众成员函数  <set>
template <class... Args>
  pair<iterator,bool> emplace (Args&&... args);

构造并插入元素

在集合中插入一个新元素(如果唯一的话)。这个新元素是使用args作为其构造的参数构造.

只有当容器中没有与被放置的元素相等的其他元素时,插入才会发生(set容器中的元素是唯一的)。

在内部,set容器保持其所有元素按照比较对象指定的标准排序。元素总是按照这种顺序插入到其各自的位置。

通过调用allocator_traits::construct并传递args来构造元素。
存在一个类似的成员函数 insert,它复制或移动现有的对象到容器中。

☲  参数


args
用于构造新元素的参数。

☉  返回值



如果函数成功插入元素(因为集合中已经没有等效的元素),则函数返回一个pair迭代器到新插入的元素,并返回true值。

否则,它返回一个指向容器中等效元素的迭代器,并返回一个false值。

新元素的存储是使用容器的分配器分配的, 失败时可能抛出异常(对于默认分配器,如果分配请求没有成功,将抛出bad_alloc)。
成员类型迭代器是指向元素的双向迭代器类型。
Pair是在<utility>中声明的类模板(参见Pair)。

☣  示例



// set::emplace
#include <iostream>
#include <set>
#include <string>

int main ()
{
  std::set<std::string> myset;

  myset.emplace("foo");
  myset.emplace("bar");
  auto ret = myset.emplace("foo");

  if (!ret.second) std::cout << "foo already exists in myset\n";

  return 0;
}

输出:
foo already exists in myset

✥ 复杂度



容器大小的对数。

☣ 迭代器的有效性



不变.

⇄ 数据竞争


容器被修改。
并发地访问现有元素是安全的,但迭代容器中的范围则不安全。

☂ 异常安全性



强保证:如果抛出异常,容器中不会有任何变化。
如果allocator_traits::construct不支持相应的参数,它会导致未定义行为。

🍄  另请参阅



set::emplace_hint 构造插入元素并加提示(公众成员函数)
set::insert 插入元素(公众成员函数)
set::erase 删除元素(公众成员函数)

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