std::
unordered_map::emplace_hint
公众成员函数 <unordered_map>
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
构造插入元素并加提示
在
unordered_map中插入一个新元素---如果它的值是唯一的。
这个新元素是使用
args作为元素构造函数的参数构造。
Position指向容器中的一个位置,提示从哪里开始搜索其插入点(容器可能使用也可能不使用此建议来优化插入操作)。
只有当容器中没有元素的键与被放置的键等价时,插入才会发生(unordered_map容器中的元素是唯一的)。
存在一个类似的成员函数
insert,它将现有对象复制或移动到容器中,也可以获取位置提示。
☲ 参数
-
position
-
作为插入操作提示的位置。容器可以使用该值来优化操作。
成员类型const_iterator是前向迭代器类型。
-
args
-
C++11: 用于为插入的元素构造映射类型的新对象的参数。
C++14: 被转发来构造新元素(类型pair<const key_type, mapped_type>)的参数。
这可以是:
-
两个参数:一个用于键,另一个用于映射的值。
-
pair类型的单个参数,键的值作为第一个成员,映射值的值作为第二个成员。
-
Piecewise_construct作为第一个参数,另外两个带有元组的参数分别作为键值和映射值的参数转发。
请参阅pair::pair了解更多信息。
☉ 返回值
一个指向容器中元素的迭代器,其键值等于新插入的元素。如果新插入的元素确实被插入,
则指向新插入的元素;如果已经存在一个具有等价键的元素(未被替换),则指向具有等价键的现有元素。
成员类型
iterator是前向迭代器类型。
unordered_map容器中的所有迭代器都具有对元素的
const访问权限:元素可以插入或移除,但不能在容器中修改。
使用
allocator_traits<allocator_type>::construct()分配新元素的存储,
失败时可能抛出异常(对于默认分配器,如果分配请求不成功则抛出
bad_alloc)。
☣ 示例
参阅 unordered_map::emplace。
✥ 复杂度
平均情况下:常数。
最坏情况:容器大小呈线性。
可能会触发重新
hash(不包括)。
☣ 迭代器的有效性
在大多数情况下,容器中的所有迭代器在插入之后仍然有效。唯一的例外是容器的增长迫使重新hash。
在这种情况下,容器中的所有迭代器都失效。
如果插入操作后的新容器大小超过其容量阈值(计算方法为容器的
bucket_count乘以其
max_load_factor),
则强制进行
rehash。
引用在所有情况下都保持有效,即使在重新
rehash之后也是如此。
🍄 另请参阅
unordered_map::emplace |
构造插入元素(公众成员函数) |
unordered_map::insert |
插入元素(公众成员函数) |