命名空间
变体
操作

std::multiset<Key,Compare,Allocator>::insert

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

将元素(s)插入到容器中。剩余等效元素的顺序保持不变。

1,2) 插入 value。如果容器中存在具有等效键的元素,则在该范围的上界插入。
3,4) 在尽可能接近 pos 之前位置的位置插入 value
5) 插入范围 [firstlast) 中的元素。
6) 从初始化列表 ilist 中插入元素。
7) 如果 nh 是一个空的 节点句柄,则不执行任何操作。否则,将由 nh 拥有的元素插入到容器中,并返回指向插入元素的迭代器。如果容器中存在包含键与 nh.key() 相同的元素的范围,则在该范围的末尾插入元素。如果 nh 不为空且 get_allocator() != nh.get_allocator(),则行为未定义。
8) 如果 nh 是一个空的 节点句柄,则不执行任何操作,并返回尾部迭代器。否则,将由 nh 拥有的元素插入到容器中,并返回指向具有与 nh.key() 相同键的元素的迭代器。元素在尽可能接近 pos 之前位置的位置插入。如果 nh 不为空且 get_allocator() != nh.get_allocator(),则行为未定义。

没有任何迭代器或引用被失效。 如果插入成功,则在该元素被包含在节点句柄中时获得的指向该元素的指针和引用将失效,而在提取该元素之前获得的指向该元素的指针和引用将变为有效。(自 C++17 起)

内容

[编辑] 参数

pos - 指向将插入新元素之前的位置的迭代器
value - 要插入的元素值
first, last - 要插入的元素范围
ilist - 要从中插入值的初始化列表
nh - 一个兼容的 节点句柄
类型要求
-
InputIt 必须满足 LegacyInputIterator 的要求。

[编辑] 返回值

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

[编辑] 异常

1-4,7,8) 如果任何操作抛出异常,则插入将没有效果。
5,6) 没有异常安全保证。

[编辑] 复杂度

1,2,7) O(log(size()))
3,4,8) 如果插入发生在 pos 之前的位置,则为摊销常数,否则为 O(log(size()))
5,6) O(N·log(size() + N)),其中 N 是要插入的元素数量。

[编辑] 示例

[编辑] 缺陷报告

以下行为更改缺陷报告被追溯应用于以前发布的 C++ 标准。

DR 应用于 已发布的行为 正确的行为
LWG 233 C++98 pos 只是一个提示,它可以被完全忽略 插入需要
尽可能接近
pos 之前的位置
LWG 264 C++98 过载 (5) 的复杂度要求为线性,如果
范围 [first, last) 按照 Compare 排序
删除了线性要求
在这种特殊情况下
LWG 371 C++98 等效元素的顺序不保证被保留 需要被保留

[编辑] 参见

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