77
88``` cpp
99template <container-compatible-range<value_type> R>
10- void insert_range (R&& rg); // (1) C++23
10+ void insert_range (R&& rg); // (1) C++23
1111template<container-compatible-range<value_type> R>
12- constexpr void insert_range(R&& rg); // (1) C++26
12+ constexpr void insert_range(R&& rg); // (1) C++26
13+
14+ template<container-compatible-range<value_type> R>
15+ constexpr void insert_range(sorted_unique_t, R&& rg); // (2) C++26
1316```
1417* container-compatible-range[link /reference/exposition-only/container-compatible-range.md]
18+ * sorted_unique_t[link /reference/flat_map/sorted_unique_t.md]
1519
1620## 概要
1721Rangeを挿入し、コンテナを拡張する。
@@ -26,17 +30,19 @@ Rangeを挿入し、コンテナを拡張する。
2630
2731
2832## 効果
29- - メンバ変数として保持しているコンテナ`c`に、以下のように挿入する:
33+ - (1) : メンバ変数として保持しているコンテナ`c`に、以下のように挿入する:
3034 ```cpp
31- for (const auto& e : rg ) {
32- c.keys.insert(c.keys.end(), e.first);
33- c.values.insert(c.values.end(), e.second);
34- }
35+ ranges::for_each(rg, [&](value_type e ) {
36+ c.keys.insert(c.keys.end(), std::move( e.first) );
37+ c.values.insert(c.values.end(), std::move( e.second) );
38+ });
3539 ```
3640 * c.keys[link containers.md]
3741 * c.values[link containers.md]
42+ * ranges::for_each[link /reference/algorithm/ranges_for_each.md]
3843 * end()[link /reference/vector/vector/end.md]
3944 * insert[link /reference/vector/vector/insert.md]
45+ * std::move[link /reference/utility/move.md]
4046 * first[link /reference/utility/pair/first.md]
4147 * second[link /reference/utility/pair/second.md]
4248
@@ -58,13 +64,16 @@ Rangeを挿入し、コンテナを拡張する。
5864 * key_equiv[link key_equiv.md]
5965 * distance[link /reference/iterator/distance.md]
6066
67+ - (2) : `insert_range(rg)`と等価
68+
6169
6270## 戻り値
6371なし
6472
6573
6674## 計算量
67- - Nをこの操作の前の[`size()`](size.md)、Mを[`ranges::distance`](/reference/iterator/ranges_distance.md)`(rg)`として、N + MlogM
75+ - (1) : Nをこの操作の前の[`size()`](size.md)、Mを[`ranges::distance`](/reference/iterator/ranges_distance.md)`(rg)`として、N + MlogM
76+ - (2) : 線形
6877
6978
7079## 備考
@@ -123,3 +132,6 @@ int main()
123132
124133## 参照
125134- [ P3372R3 constexpr containers and adaptors] ( https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html )
135+ - [ P3567R2 flat_meow Fixes] ( https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3567r2.html )
136+ - C++26で(2)の` sorted_unique_t ` をとるオーバーロードが追加された
137+ - C++26で(1)の効果が、要素のコピーではなくムーブを行うように修正された
0 commit comments