公有成员函数
<unordered_map>

std::unordered_map::emplace_hint

template <class... Args>iterator emplace_hint ( const_iterator position, Args&&... args );
带提示构建并插入元素
如果键是唯一的,则在 `unordered_map` 中插入一个新元素。该新元素使用 `args` 作为元素构造函数的参数,在原地进行构造。position指向容器中的一个位置,该位置被建议作为搜索插入点的提示(容器可能使用也可能不使用此建议来优化插入操作)。

只有当容器中没有键与要插入的键等效的元素时,才会进行插入(`unordered_map` 中的键是唯一的)。

如果成功插入,则容器的 size 会增加一。

存在一个类似的成员函数 insert,它会复制或移动现有对象到容器中,并且也可能接受一个位置提示。

参数

position
作为插入操作的插入位置提示。该值可能被容器用来优化操作。
成员类型const_iterator是一个 forward iterator 类型。
args
用于构造插入元素 `mapped_type` 的新对象的参数。
转发给用于构造新元素(类型为 `pair<const key_type, mapped_type>`)的参数。
可以是以下之一:
- 两个参数:一个用于 `key`,另一个用于 `mapped_value`。
- 一个类型为 `pair` 的参数,其第一个成员是 `key` 的值,第二个成员是 `mapped_value` 的值。
- 第一个参数为 `piecewise_construct`,外加两个额外的参数,这两个参数是 `tuple`,将分别作为 `key value` 和 `mapped value` 的参数转发。
有关更多信息,请参阅 `pair::pair

返回值

指向容器中键与新插入元素等效的元素的迭代器。如果新元素被插入,则指向新插入的元素;如果已存在等效的键,则指向该现有元素(不会被替换)。

成员类型iterator是一个 forward iterator

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

示例

暂无示例。请参阅 unordered_map::emplace 的示例。

复杂度

平均情况:常量。
最坏情况:容器大小的线性。
可能会触发 rehash(未包含)。

迭代器有效性

在大多数情况下,插入后容器中的所有迭代器都保持有效。唯一的例外是当容器的增长强制重新哈希时。在这种情况下,容器中的所有迭代器都将失效。

如果插入操作后容器的新 size 将超过其容量阈值(计算方法为容器的 bucket_count 乘以其 max_load_factor),则会强制进行 rehash。

在所有情况下,即使在 rehash 之后,引用仍然保持有效。

另见