命名空间
变体
操作

std::unordered_multiset<Key,Hash,KeyEqual,Allocator>::insert

来自 cppreference.com
 
 
 
 
iterator insert( const value_type& value );
(1) (自 C++11)
iterator insert( value_type&& value );
(2) (自 C++11)
iterator insert( const_iterator hint, const value_type& value );
(3) (自 C++11)
iterator insert( const_iterator hint, value_type&& value );
(4) (自 C++11)
template< class InputIt >
void insert( InputIt first, InputIt last );
(5) (自 C++11)
void insert( std::initializer_list<value_type> ilist );
(6) (自 C++11)
iterator insert( node_type&& nh );
(7) (自 C++17)
iterator insert( const_iterator hint, node_type&& nh );
(8) (自 C++17)

将元素插入容器中。

1,2) 插入 value
3,4) 插入 value,使用 hint 作为搜索应从何处开始的非绑定建议。
5) 插入范围 [firstlast) 中的元素。
6) 插入来自初始化列表 ilist 的元素。
7) 如果 nh 是一个空的 节点句柄,则不执行任何操作。否则,将 nh 所拥有的元素插入容器中,并返回指向插入元素的迭代器。如果 nh 不是空的并且 get_allocator() != nh.get_allocator(),则行为未定义。
8) 如果 nh 是一个空的 节点句柄,则不执行任何操作并返回末尾迭代器。否则,将 nh 所拥有的元素插入容器中,并返回指向具有与 nh.key() 等效键的元素的迭代器。 hint 用作搜索应从何处开始的非绑定建议。如果 nh 不是空的并且 get_allocator() != nh.get_allocator(),则行为未定义。

如果在操作后新元素的数量大于旧的 max_load_factor() * bucket_count(),则会发生重新散列。
如果发生重新散列(由于插入),则所有迭代器将失效。否则(没有重新散列),迭代器不会失效。 如果插入成功,则在该元素保存在节点句柄中时获得的指向该元素的指针和引用将失效,而在该元素被提取之前获得的指向该元素的指针和引用将变为有效。(自 C++17)

内容

[编辑] 参数

hint - 迭代器,用作插入内容的建议位置
value - 要插入的元素值
first, last - 要插入的元素范围
ilist - 用于插入值的初始化列表
nh - 一个兼容的 节点句柄
类型要求
-
InputIt 必须满足 LegacyInputIterator 的要求。

[编辑] 返回值

1-4) 指向插入元素的迭代器。
5,6) (无)
7,8) 如果 nh 为空,则为末尾迭代器,否则为指向插入元素的迭代器。

[编辑] 异常

1-4) 如果任何操作抛出异常,则插入将无效。

[编辑] 复杂度

1-4) 平均情况:O(1),最坏情况:O(size())
5,6) 平均情况:O(N),其中 N 是要插入的元素数量。最坏情况:O(N * size() + N)
7,8) 平均情况:O(1),最坏情况:O(size())

[编辑] 示例

[编辑] 另请参阅

在位构造元素
(公有成员函数) [编辑]
使用提示在位构造元素
(公有成员函数) [编辑]
创建从参数推断类型的 std::insert_iterator
(函数模板) [编辑]