public member function
<map>

std::multimap::emplace_hint

template <class... Args>  iterator emplace_hint (const_iterator position, Args&&... args);
带提示构建并插入元素
multimap 中插入新元素,并提供插入位置的提示。此新元素使用 args 作为构造一个value_type(即一个 pair 类型对象) 的参数就地构造。

这会将容器的 size 有效地增加一。

position 中的值用作插入点的提示。该元素仍将根据其内部 比较对象 所描述的顺序插入到其相应的位置,但此提示用于函数开始搜索插入点,当实际插入点为 position 或接近它时,可以大大加快该过程。

通过调用 allocator_traits::construct 并转发 args 来就地构造元素。

等效元素的相对顺序得以保留,新插入的元素将跟在其容器中已存在的等效元素之后。

参数

position
元素可插入位置的提示。
如果 position 指向将跟在插入元素后面的元素(或者指向 end,如果它是最后一个),该函数将优化其插入时间。
请注意,这不会强制新元素进入 multimap 容器中的那个位置(multimap 中的元素始终遵循特定顺序)。
const_iterator是一个成员类型,定义为指向元素的 双向迭代器类型。
args
用于构造插入元素的映射类型新对象的参数。
转发给构造新元素(类型为 pair<const key_type, mapped_type>)的参数。
这可以是以下之一:
- 两个参数:一个用于,另一个用于映射值
- 一个类型为 pair 的参数,其第一个成员是的值,第二个成员是映射值的值。
- 以 piecewise_construct 作为第一个参数,以及另外两个参数,它们是传递给键值映射值的构造函数的元组
有关更多信息,请参阅 pair::pair

返回值

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

成员类型iterator双向迭代器 类型,指向一个元素。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// multimap::emplace_hint
#include <iostream>
#include <string>
#include <map>

int main ()
{
  std::multimap<std::string,int> mymultimap;
  auto it = mymultimap.end();

  it = mymultimap.emplace_hint(it,"foo",10);
  mymultimap.emplace_hint(it,"bar",20);
  mymultimap.emplace_hint(mymultimap.end(),"foo",30);

  std::cout << "mymultimap contains:";
  for (auto& x: mymultimap)
    std::cout << " [" << x.first << ':' << x.second << ']';
  std::cout << '\n';

  return 0;
}
输出
mymultimap contains: [bar:20] [foo:10] [foo:30]


复杂度

通常是容器 size 的对数复杂度。
如果元素的插入点是 position,则为摊销常数复杂度。

迭代器有效性

没有变化。

数据竞争

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

异常安全

强保证:如果抛出异常,容器没有发生变化。
如果不支持带有适当参数的 allocator_traits::construct,则会导致未定义行为

另见