- flat_map[meta header]
- std[meta namespace]
- flat_multimap[meta class]
- function[meta id-type]
- cpp23[meta cpp]
template<container-compatible-range<value_type> R>
void insert_range(R&& rg); // (1) C++23
template<container-compatible-range<value_type> R>
constexpr void insert_range(R&& rg); // (1) C++26
template<container-compatible-range<value_type> R>
constexpr void insert_range(sorted_equivalent_t, R&& rg); // (2) C++26- container-compatible-range[link /reference/exposition-only/container-compatible-range.md]
- sorted_equivalent_t[link /reference/flat_map/sorted_equivalent_t.md]
Rangeを挿入し、コンテナを拡張する。
これは、挿入された要素の数だけコンテナの size() を増やす。
内部的に flat_multimap コンテナは、コンストラクト時に指定された比較オブジェクトによって要素を下位から上位へとソートして保持する。
-
(1) : メンバ変数として保持しているコンテナ
cに、以下のように挿入する:ranges::for_each(rg, [&](value_type e) { c.keys.insert(c.keys.end(), std::move(e.first)); c.values.insert(c.values.end(), std::move(e.second)); });
- c.keys[link containers.md]
- c.values[link containers.md]
- ranges::for_each[link /reference/algorithm/ranges_for_each.md]
- end()[link /reference/vector/vector/end.md]
- insert[link /reference/vector/vector/insert.md]
- std::move[link /reference/utility/move.md]
- first[link /reference/utility/pair/first.md]
- second[link /reference/utility/pair/second.md]
- 次に、新しく挿入された要素の範囲を
value_comp()を基準にソートする - 次に、ソートされた結果の範囲と、既存の要素のソートされた範囲をひとつのソートされた範囲にマージする
-
(2) :
insert_range(rg)と等価
なし
- (1) : Nをこの操作の前の
size()、Mをranges::distance(rg)として、N + MlogM - (2) : 線形
- この操作はインプレース・マージを行うため、追加のメモリ確保を行う可能性がある
#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;
}
}- insert_range[color ff0000]
3 : a
3 : h
5 : d
15 : e
- Clang: ??
- GCC: ??
- Visual C++: ??
| 名前 | 説明 |
|---|---|
flat_multimap::insert |
要素を挿入する |
flat_multimap::emplace |
要素を直接構築する |
flat_multimap::emplace_hint |
ヒントを使って要素を直接構築する |
- P3372R3 constexpr containers and adaptors
- P3567R2 flat_meow Fixes
- C++26で(2)の
sorted_equivalent_tをとるオーバーロードが追加された - C++26で(1)の効果が、要素のコピーではなくムーブを行うように修正された
- C++26で(2)の