最終更新日時(UTC): 2026年03月13日 02時25分45秒
Akira Takahashi が更新

履歴 編集

function
<flat_set>

# std::flat_multiset::insert_range(C++23)

    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

## 概要

Rangeを挿入し、コンテナを拡張する。

これは、挿入された要素の数だけコンテナの `size()` を増やす。

内部的に `flat_multiset` コンテナは、コンストラクト時に指定された比較オブジェクトによって要素を下位から上位へとソートして保持する。

## 効果

- (1) : メンバ変数として保持しているコンテナ`c`に、以下のように挿入する：

      ranges::for_each(rg, [&](auto&& e) {
        c.insert(c.end(), std::forward<decltype(e)>(e));
      });

  - 次に、新しく挿入された要素の範囲を`value_comp()`を基準にソートする
  - 次に、ソートされた結果の範囲と、既存の要素のソートされた範囲をひとつのソートされた範囲にマージする

- (2) : `insert_range(rg)`と等価

## 戻り値

なし

## 計算量

- (1) : Nをこの操作の前の`size()`、Mを`ranges::distance(rg)`として、N + MlogM
- (2) : 線形

## 備考

- この操作はインプレース・マージを行うため、追加のメモリ確保を行う可能性がある

## 例

    #include <flat_set>
    #include <iostream>

    int main()
    {
      std::flat_multiset<int> fs = {3};

      std::flat_multiset<int> fs2 = {5, 15};

      fs.insert_range(fs2);

      for (int i : fs) {
        std::cout << i << std::endl;
      }
    }

### 出力

    3
    5
    15

## バージョン

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: ??

## 関連項目

名前 | 説明
--- | ---
`flat_multiset::insert` | 要素を挿入する
`flat_multiset::emplace` | 要素を直接構築する
`flat_multiset::emplace_hint` | ヒントを使って要素を直接構築する

## 参照

- P3372R3 constexpr containers and adaptors
- P3567R2 flat_meow Fixes
  - C++26で(2)の`sorted_equivalent_t`をとるオーバーロードが追加された