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) 插入 value 到尽可能靠近紧接 pos 之前的位置。等价于 return emplace_hint(pos, value);
4) 插入 value 到尽可能靠近紧接 pos 之前的位置。等价于 return emplace_hint(pos, std::move(value));
5) 如同以 emplace(std::forward<P>(x));x 插入 *this。此重载只有在 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)

返回值

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

异常

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

复杂度

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()

示例

参阅

原位构造元素
(公开成员函数)
使用提示原位构造元素
(公开成员函数)
创建拥有从实参推出的类型的 std::insert_iterator
(函数模板)