@@ -30,13 +30,10 @@ void insert(sorted_unique_t,
30
30
InputIterator first,
31
31
InputIterator last); // (8) C++23
32
32
33
- template<container-compatible-range<value_type> R>
34
- void insert_range(R&& rg); // (9) C++23
35
-
36
- void insert(initializer_list<value_type> il); // (10) C++23
33
+ void insert(initializer_list<value_type> il); // (9) C++23
37
34
38
35
void insert(sorted_unique_t s,
39
- initializer_list<value_type> il); // (11 ) C++23
36
+ initializer_list<value_type> il); // (10 ) C++23
40
37
```
41
38
* pair[link /reference/utility/pair.md]
42
39
* initializer_list[link /reference/initializer_list/initializer_list.md]
@@ -64,9 +61,8 @@ void insert(sorted_unique_t s,
64
61
- (6) : 指定された位置に、要素型`value_type`のコンストラクタ引数を受け取って挿入する
65
62
- (7) : イテレータ範囲`[first, last)`を挿入する
66
63
- (8) : ソート済みかつ重複要素のないイテレータ範囲`[first, last)`を挿入する
67
- - (9) : Rangeを挿入する
68
- - (10) : 初期化子リストを挿入する
69
- - (11) : ソート済みかつ重複要素のない初期化子リストを挿入する
64
+ - (9) : 初期化子リストを挿入する
65
+ - (10) : ソート済みかつ重複要素のない初期化子リストを挿入する
70
66
71
67
72
68
## 要件
@@ -181,44 +177,12 @@ void insert(sorted_unique_t s,
181
177
* key_equiv[link key_equiv.md]
182
178
* distance[link /reference/iterator/distance.md]
183
179
184
- - (9) : メンバ変数として保持しているコンテナ`c`に、以下のように挿入する:
185
- ```cpp
186
- for (const auto& e : rg) {
187
- c.keys.insert(c.keys.end(), e.first);
188
- c.values.insert(c.values.end(), e.second);
189
- }
190
- ```
191
- * c.keys[link containers.md]
192
- * c.values[link containers.md]
193
- * end()[link /reference/vector/vector/end.md]
194
- * insert[link /reference/vector/vector/insert.md]
195
- * first[link /reference/utility/pair.md]
196
- * second[link /reference/utility/pair.md]
197
-
198
- - 次に、新しく挿入された要素の範囲を`value_comp()`を基準にソートする
199
- - 次に、ソートされた結果の範囲と、既存の要素のソートされた範囲をひとつのソートされた範囲にマージする
200
- - 最後に、重複する要素を以下のように削除する:
201
-
202
- ```cpp
203
- auto zv = ranges::zip_view(c.keys, c.values);
204
- auto it = ranges::unique(zv, key_equiv(compare)).begin();
205
- auto dist = distance(zv.begin(), it);
206
- c.keys.erase(c.keys.begin() + dist, c.keys.end());
207
- c.values.erase(c.values.begin() + dist, c.values.end());
208
- ```
209
- * c.keys[link containers.md]
210
- * c.values[link containers.md]
211
- * ranges::zip_view[link /ranges/zip_view.md.nolink]
212
- * ranges::unique[link /reference/algorithm/ranges_unique.md]
213
- * key_equiv[link key_equiv.md]
214
- * distance[link /reference/iterator/distance.md]
215
-
216
- - (10) :
180
+ - (9) :
217
181
```cpp
218
182
insert(il.begin(), il.end());
219
183
```
220
184
221
- - (11 ) :
185
+ - (10 ) :
222
186
```cpp
223
187
insert(s, il.begin(), il.end());
224
188
```
@@ -231,17 +195,16 @@ void insert(sorted_unique_t s,
231
195
- (3), (4), (6) :
232
196
- 挿入された場合には、新しく挿入された要素を指すイテレータを返す。
233
197
- 挿入されなかった場合には、`x`のキーと等価のキーを持つ要素へのイテレータを返す。
234
- - (7), (8), (9), (10), (11) : なし
198
+ - (7), (8), (9), (10) : なし
235
199
236
200
237
201
## 計算量
238
202
- (7) : Nをこの操作の前の[`size()`](size.md)、Mを[`distance`](/reference/iterator/distance.md)`(first, last)`として、N + MlogM
239
- - (7) : Nをこの操作のあとの[`size()`](size.md)として、Nに対して線形
240
- - (8) : Nをこの操作の前の[`size()`](size.md)、Mを[`ranges::distance`](/reference/iterator/ranges_distance.md)`(rg)`として、N + MlogM
203
+ - (8) : Nをこの操作のあとの[`size()`](size.md)として、Nに対して線形
241
204
242
205
243
206
## 備考
244
- - (7), (8), (9) : この操作はインプレース・マージを行うため、追加のメモリ確保を行う可能性がある
207
+ - (7), (8) : この操作はインプレース・マージを行うため、追加のメモリ確保を行う可能性がある
245
208
246
209
247
210
## 例
@@ -263,7 +226,6 @@ int main()
263
226
};
264
227
265
228
// シーケンスを挿入する
266
- fm.insert(fm2);
267
229
fm.insert(fm2.begin(), fm2.end());
268
230
269
231
// 挿入するシーケンスがソート済みかつ重複要素がないことがわかっている場合、
@@ -275,6 +237,7 @@ int main()
275
237
}
276
238
}
277
239
```
240
+ * insert[ color ff0000]
278
241
* begin()[ link begin.md]
279
242
* end()[ link end.md]
280
243
* std::sorted_unique[ link /reference/flat_map/sorted_unique_t.md]
@@ -298,6 +261,7 @@ int main()
298
261
| 名前 | 説明 |
299
262
| ------------------------------------------------| --------------------------------------------|
300
263
| [ ` flat_map::insert_or_assign ` ] ( insert_or_assign.md.nolink ) | 要素を挿入、あるいは代入する |
264
+ | [ ` flat_map::insert_range ` ] ( insert_range.md ) | Rangeを挿入する |
301
265
| [ ` flat_map::emplace ` ] ( emplace.md ) | 要素を直接構築する |
302
266
| [ ` flat_map::emplace_hint ` ] ( emplace_hint.md ) | ヒントを使って要素を直接構築する |
303
267
| [ ` flat_map::try_emplace ` ] ( try_emplace.md ) | キーが存在しない場合のみ要素を直接構築する |
0 commit comments