template<container-compatible-range<value_type> R>
void insert_range(R&& rg); // (1) C++23
概要
Rangeを挿入し、コンテナを拡張する。
これは、挿入された要素の数だけコンテナの size()
を増やす。
内部的に flat_multimap
コンテナは、コンストラクト時に指定された比較オブジェクトによって要素を下位から上位へとソートして保持する。
効果
-
メンバ変数として保持しているコンテナ
c
に、以下のように挿入する:
for (const auto& e : rg) { c.keys.insert(c.keys.end(), e.first); c.values.insert(c.values.end(), e.second); }
- 次に、新しく挿入された要素の範囲を
value_comp()
を基準にソートする - 次に、ソートされた結果の範囲と、既存の要素のソートされた範囲をひとつのソートされた範囲にマージする
- 次に、新しく挿入された要素の範囲を
戻り値
なし
計算量
- Nをこの操作の前の
size()
、Mをranges::distance(rg)
として、N + MlogM
備考
- この操作はインプレース・マージを行うため、追加のメモリ確保を行う可能性がある
例
#include <iostream>
#include <flat_map>
int main()
{
std::flat_multimap<int, char> fm = {
{3, 'a'}
};
std::flat_multimap<int, char> fm2 = {
{5, 'd'},
{15, 'e'},
{3, 'h'}
};
fm.insert_range(fm2);
for (const auto& [key, value] : fm) {
std::cout << key << " : " << value << std::endl;
}
}
22
std::cout << key << " : " << value << std::endl;
#include <iostream>
#include <flat_map>
int main()
{
std::flat_multimap<int, char> fm = {
{3, 'a'}
};
std::flat_multimap<int, char> fm2 = {
{5, 'd'},
{15, 'e'},
{3, 'h'}
};
fm.insert_range(fm2);
for (const auto& [key, value] : fm) {
出力
3 : a
3 : h
5 : d
15 : e
バージョン
処理系
- Clang: ??
- GCC: ??
- Visual C++: ??
関連項目
名前 | 説明 |
---|---|
flat_multimap::insert |
要素を挿入する |
flat_multimap::emplace |
要素を直接構築する |
flat_multimap::emplace_hint |
ヒントを使って要素を直接構築する |