std::unordered_map::insert_or_assign

来自cppreference.com
 
 
 
 
template <class M>
pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj);
(1) (C++17 起)
template <class M>
pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj);
(2) (C++17 起)
template <class M>
iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj);
(3) (C++17 起)
template <class M>
iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj);
(4) (C++17 起)
1,3) 若等价于 k 的关键已存在于容器中,则赋值 std::forward<M>(obj) 给对应于关键 kmapped_type 。若关键不存在,则如同用 insert 插入新值,从 value_type(k, std::forward<M>(obj)) 构造。
2,4)(1,3) ,除了被映射值从 value_type(std::move(k), std::forward<M>(obj)) 构造。

若因插入发生重哈希,则所有迭代器都被非法化。否则迭代器不受影响。引用不受影响。重哈希仅若新元素数量大于 max_load_factor()*bucket_count() 才发生。若插入成功,则在结点把柄保有元素时获得的指向该元素的指针和引用被非法化,而在提取前获得的指向元素的指针和引用变得合法。 (C++17 起)

目录

[编辑] 参数

k - 用于查找和若找不到则插入的关键
hint - 指向新元素将要插入位置之前位置的迭代器
obj - 要插入或赋值的值

[编辑] 返回值

1,2) 若插入发生则 bool 组分为 true ,若赋值发生则 bool 组分为 false 。迭代器组分指向插入或更新的元素。
3,4) 指向被插入或更新的元素的迭代器。

[编辑] 复杂度

1,2)emplace 的相同
3,4)emplace_hint 的相同

[编辑] 注意

insert_or_assign 返回多于 operator[] 的信息,而且不要求被映射类型的可默认构造性。

[编辑] 示例

[编辑] 参阅

访问或插入指定的元素
(公开成员函数) [编辑]
访问指定的元素,同时进行越界检查
(公开成员函数) [编辑]
插入元素或结点 (C++17 起)
(公开成员函数) [编辑]
原位构造元素
(公开成员函数) [编辑]