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

std::

multiset::emplace_hint

公众成员函数  <set>
template <class... Args>
  iterator emplace_hint (const_iterator position, Args&&... args);

构造插入元素并加提示

multiset中插入一个新元素(如果唯一),并在插入位置上提供提示。 这个新元素是使用args作为其构造的参数构造的。

容器的大小增加1。

position中的值用作插入点上的提示。尽管如此, 元素仍将按照其内部比较对象描述的顺序插入到其相应的位置, 但函数使用此提示开始搜索插入点,当实际插入点位于该位置或接近该位置时,该过程将大大加快。

通过调用allocator_traits::construct并传递args来构造元素。

C++98:不能保证等效元素的相对顺序。

C++11:等价元素的相对顺序保持不变,新插入的元素跟随着容器中已经存在的等价元素。

☲  参数


position
元素可插入位置的提示。

如果位置指向插入元素后面的元素(如果是最后一个元素,则指向end),则该函数优化其插入时间.

注意,这并不强制将新元素插入到multiset容器中的那个位置(multiset中的元素总是遵循特定的顺序)。

Const_iterator是一个成员类型,定义为指向元素的双向迭代器类型。
args
用于构造新元素的参数。

☉  返回值



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

成员类型iterator是指向元素的双向迭代器类型。

☣  示例



// multiset::emplace_hint
#include <iostream>
#include <set>
#include <string>

int main ()
{
  std::multiset<std::string> mymultiset;
  auto it = mymultiset.cbegin();

  mymultiset.emplace_hint (it,"apple");
  it = mymultiset.emplace_hint (mymultiset.cend(),"orange");
  it = mymultiset.emplace_hint (it,"melon");
  mymultiset.emplace_hint (it,"melon");

  std::cout << "mymultiset contains:";
  for (const std::string& x: mymultiset)
    std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

输出:
mymultiset contains: apple melon melon orange

✥ 复杂度



一般来说,容器大小为对数。
如果元素的插入点是 position,则为平摊常数。

☣ 迭代器的有效性



不变.

⇄ 数据竞争


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

☂ 异常安全性



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

🍄  另请参阅



multiset::emplace 构造插入元素(公众成员函数)
multiset::insert 插入元素(公众成员函数)
multiset::erase 删除元素(公众成员函数)

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