Skip to content

Commit 192845f

Browse files
committed
add insert_range to std::unordered_set and std::unordered_multiset (#1069)
1 parent 9235ec5 commit 192845f

File tree

4 files changed

+144
-0
lines changed

4 files changed

+144
-0
lines changed

reference/unordered_set/unordered_multiset.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ namespace std {
9999
| [`emplace`](unordered_multiset/emplace.md) | コンテナ内への要素の直接構築 | C++11 |
100100
| [`emplace_hint`](unordered_multiset/emplace_hint.md) | 挿入位置のヒントを使用したコンテナ内への要素の直接構築 | C++11 |
101101
| [`insert`](unordered_multiset/insert.md) | 要素の追加 | C++11 |
102+
| [`insert_range`](unordered_multiset/insert_range.md) | Rangeの要素を挿入する | C++23 |
102103
| [`erase`](unordered_multiset/erase.md) | 要素の削除 | C++11 |
103104
| [`clear`](unordered_multiset/clear.md) | 全要素の削除 | C++11 |
104105
| [`swap`](unordered_multiset/swap.md) | 内容の交換 | C++11 |
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# insert_range
2+
* unordered_set[meta header]
3+
* std[meta namespace]
4+
* unordered_multiset[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<value_type> R>
10+
void insert_range(R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
コンテナにRange`rg` の要素を挿入する。
15+
16+
17+
## 効果
18+
Range`rg` のすべての要素 `t` に対して、`insert(t)` を呼び出した場合と等価。
19+
20+
21+
## 事前条件
22+
`*this` の要素の範囲と Range`rg` の要素の範囲が重複していないこと
23+
24+
25+
## テンプレートパラメータ制約
26+
`value_type` は、コンテナに対して `EmplaceConstructible` であること
27+
28+
29+
## 戻り値
30+
なし
31+
32+
33+
## 計算量
34+
`N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)` とすると、平均的なケースでは `O(N)`、最悪のケースでは `O(N size() + 1)`。
35+
36+
37+
## 例
38+
```cpp example
39+
#include <iostream>
40+
#include <unordered_set>
41+
#include <vector>
42+
43+
int main ()
44+
{
45+
std::unordered_multiset<int> s = {1, 2, 3};
46+
47+
std::vector<int> v = {2, 3, 4};
48+
s.insert_range(v);
49+
50+
for (int i : s) {
51+
std::cout << i << " ";
52+
}
53+
std::cout << std::endl;
54+
55+
return 0;
56+
}
57+
```
58+
* insert_range[color ff0000]
59+
60+
### 出力
61+
```
62+
4 3 3 2 2 1
63+
```
64+
注:[`unordered_multiset`](/reference/unordered_set/unordered_multiset.md) は非順序連想コンテナであるため、出力順序は無意味であることに注意
65+
66+
67+
## 関連項目
68+
69+
| 名前 | 説明 |
70+
|-------------------------------------------|----------------------|
71+
| [`insert`](insert.md) | 要素の追加 |

reference/unordered_set/unordered_set.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ namespace std {
9797
| [`emplace`](unordered_set/emplace.md) | コンテナ内への要素の直接構築 | C++11 |
9898
| [`emplace_hint`](unordered_set/emplace_hint.md) | 挿入位置のヒントを使用したコンテナ内への要素の直接構築 | C++11 |
9999
| [`insert`](unordered_set/insert.md) | 要素の追加 | C++11 |
100+
| [`insert_range`](unordered_set/insert_range.md) | Rangeの要素を挿入する | C++23 |
100101
| [`erase`](unordered_set/erase.md) | 要素の削除 | C++11 |
101102
| [`clear`](unordered_set/clear.md) | 全要素の削除 | C++11 |
102103
| [`swap`](unordered_set/swap.md) | 内容の交換 | C++11 |
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# insert_range
2+
* unordered_set[meta header]
3+
* std[meta namespace]
4+
* unordered_set[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<value_type> R>
10+
void insert_range(R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
コンテナにRange`rg` の要素を挿入する。
15+
16+
17+
## 効果
18+
Range`rg` のすべての要素 `t` に対して、`insert(t)` を呼び出した場合と等価。
19+
20+
21+
## 事前条件
22+
`*this` の要素の範囲と Range`rg` の要素の範囲が重複していないこと
23+
24+
25+
## テンプレートパラメータ制約
26+
`value_type` は、コンテナに対して `EmplaceConstructible` であること
27+
28+
29+
## 戻り値
30+
なし
31+
32+
33+
## 計算量
34+
`N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)` とすると、平均的なケースでは `O(N)`、最悪のケースでは `O(N size() + 1)`。
35+
36+
37+
## 例
38+
```cpp example
39+
#include <iostream>
40+
#include <unordered_set>
41+
#include <vector>
42+
43+
int main ()
44+
{
45+
std::unordered_set<int> s = {1, 2, 3};
46+
47+
std::vector<int> v = {2, 3, 4};
48+
s.insert_range(v);
49+
50+
for (int i : s) {
51+
std::cout << i << " ";
52+
}
53+
std::cout << std::endl;
54+
55+
return 0;
56+
}
57+
```
58+
* insert_range[color ff0000]
59+
60+
### 出力
61+
```
62+
4 3 2 1
63+
```
64+
注:[`unordered_set`](/reference/unordered_set/unordered_set.md) は非順序連想コンテナであるため、出力順序は無意味であることに注意
65+
66+
67+
## 関連項目
68+
69+
| 名前 | 説明 |
70+
|-------------------------------------------|----------------------|
71+
| [`insert`](insert.md) | 要素の追加 |

0 commit comments

Comments
 (0)