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

std::

unordered_multiset::emplace

公众成员函数  <unordered_set>
template <class... Args> iterator emplace ( Args&&... args );

构造并插入元素

unordered_multiset中插入一个新元素。这个新元素是使用args作为元素构造函数的参数构造的。
存在一个类似的成员函数,insert,它复制或移动现有的对象到容器中。

☲  参数


args
传递给要插入的新元素的构造函数的参数。

☉  返回值



指向新插入元素的迭代器。

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

unordered_multiset容器中的所有迭代器都具有对元素的const访问权限:元素可以插入或移除,但不能在容器中修改。
成员类型iterator是前向迭代器类型。

使用allocator_traits<allocator_type>::construct()分配新元素的存储, 失败时可能抛出异常(对于默认分配器,如果分配请求不成功则抛出bad_alloc)。

☣  示例



// unordered_multiset::emplace
#include <iostream>
#include <string>
#include <unordered_set>

int main ()
{
  std::unordered_multiset<std::string> myums;

  myums.emplace ("milk");
  myums.emplace ("tea");
  myums.emplace ("coffee");
  myums.emplace ("milk");

  std::cout << "myums contains:";
  for (const std::string& x: myums) std::cout << " " << x;

  std::cout << std::endl;
  return 0;
}

输出:
myset contains: tea coffee milk milk

✥ 复杂度



平均情况下:常数。
最坏情况:容器大小呈线性。
可能会触发rehash(不包括)。

☣ 迭代器的有效性



在大多数情况下,容器中的所有迭代器在插入之后仍然有效。唯一的例外是容器的增长迫使rehash。 在这种情况下,容器中的所有迭代器都失效。

如果插入操作后的新容器大小超过其容量阈值(计算方法为容器的bucket_count乘以其max_load_factor), 则强制进行rehash。
对unordered_multiset容器中的元素的引用在所有情况下仍然有效,即使在rehash之后也是如此。

🍄  另请参阅



unordered_multiset::find 获取元素的迭代器(公众成员函数)
unordered_multiset::insert 插入元素(公众成员函数)

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