命名空间
变体
操作

std::flat_multimap<Key,T,Compare,KeyContainer,MappedContainer>::insert

来自 cppreference.com
 
 
 
 
iterator insert( const value_type& value );
(1) (自 C++23 起)
iterator insert( value_type&& value );
(2) (自 C++23 起)
iterator insert( const_iterator pos, const value_type& value );
(3) (自 C++23 起)
iterator insert( const_iterator pos, value_type&& value );
(4) (自 C++23 起)
template< class P >
iterator insert( P&& x );
(5) (自 C++23 起)
template< class P >
iterator insert( const_iterator pos, P&& x );
(6) (自 C++23 起)
template< class InputIt >
void insert( InputIt first, InputIt last );
(7) (自 C++23 起)
template< class InputIt >
void insert( std::sorted_equivalent_t, InputIt first, InputIt last );
(8) (自 C++23 起)
void insert( std::initializer_list<key_type> ilist );
(9) (自 C++23 起)
void insert( std::sorted_equivalent_t s, std::initializer_list<key_type> ilist );
(10) (自 C++23 起)

将元素插入到容器中。

1) 插入 value。等效于 return emplace(value);.
2) 插入 value。等效于 return emplace(std::move(value));.
3) 在尽可能靠近 pos 前一个位置的位置插入 value。等效于 return emplace_hint(pos, value);.
4) 在尽可能靠近 pos 前一个位置的位置插入 value。等效于 return emplace_hint(pos, std::move(value));.
5)x 插入到 *this 中,就好像通过 emplace(std::forward<P>(x)); 一样。只有当 std::is_constructible_v<pair<key_type, mapped_type>, P>true 时,此重载才参与重载解析。
6)x 插入到 *this 中,在尽可能靠近 pos 前一个位置的位置。等效于 return emplace_hint(position, std::forward<P>(x));。只有当 std::is_constructible_v<pair<key_type, mapped_type>, P>true 时,此重载才参与重载解析。
7) 插入范围 [firstlast) 中的元素,就好像顺序执行以下操作一样
  1. 将元素添加到 c 中,就好像通过以下方式进行一样
    for (; first != last; ++first)
    {
        value_type value = *first;
        c.keys.insert(c.keys.end(), std::move(value.first));
        c.values.insert(c.values.end(), std::move(value.second));
    }
  2. 根据 value_comp 对新插入的元素范围进行排序。
  3. 将排序后的新插入的元素范围与已有的元素范围合并到单个排序后的范围中。
在就地合并操作期间可能会分配内存。
8) 插入范围 [firstlast) 中的元素,就好像顺序执行以下操作一样
  1. 将元素添加到 c 中,就好像通过以下方式进行一样
    for (; first != last; ++first)
    {
        value_type value = *first;
        c.keys.insert(c.keys.end(), std::move(value.first));
        c.values.insert(c.values.end(), std::move(value.second));
    }
  2. 将排序后的新添加的元素范围与已有的元素范围合并到单个排序后的范围中。
在就地合并操作期间可能会分配内存。
9) 插入初始化列表 ilist 中的元素。等效于 insert(ilist.begin(), ilist.end());.
10) 插入初始化列表 ilist 中的元素。等效于 insert(s, ilist.begin(), ilist.end());.

内容

[编辑] 参数

pos - 指向将在其之前插入新元素的位置的迭代器
value - 要插入的元素值
first, last - 要插入的元素范围
ilist - 一个初始化列表,用于插入来自
x - 任何可以与键透明比较的类型的值
s - 一个消歧义标签,指示输入序列是排序的(相对于 value_comp()
类型要求
-
InputIt 必须满足 LegacyInputIterator 的要求。

[edit] 返回值

1-6) 指向插入元素的迭代器。
7-10) (无)

[edit] 异常

1-6) 如果任何操作抛出异常,则插入无效。
7-10) 没有异常安全保障。(?)

[edit] 复杂度

1-6) 线性于 size()
7) N + M·log(M),其中 N 是操作前的 size(),而 Mstd::distance(first, last)
8) 线性于 size()
9) N + M·log(M),其中 N 是操作前的 size(),而 Milist.size()
10) 线性于 N,其中 N 是操作后的 size()

[edit] 示例

[edit] 参见

原地构造元素
(public member function) [edit]
使用提示原地构造元素
(public member function) [edit]
创建 std::insert_iterator,其类型从参数推断
(function template) [edit]