|
6 | 6 |
|
7 | 7 | ```cpp |
8 | 8 | namespace std { |
9 | | - template <class Compare, class Container> |
| 9 | + // 説明用の型 |
| 10 | + template <class InputIterator> |
| 11 | + using iter_val_t = typename iterator_traits<InputIterator>::value_type; |
| 12 | + |
| 13 | +template <class Compare, class Container> |
10 | 14 | priority_queue(Compare, Container) |
11 | 15 | -> priority_queue<typename Container::value_type, Container, Compare>; // (1) |
12 | 16 |
|
13 | 17 | template <class InputIterator, |
14 | | - class Compare = less<typename iterator_traits<InputIterator>::value_type>, |
15 | | - class Container = std::vector<typename iterator_traits<InputIterator>::value_type>> |
| 18 | + class Compare = less<iter_val_t<InputIterator>>, |
| 19 | + class Container = std::vector<iter_val_t<InputIterator>>> |
16 | 20 | priority_queue(InputIterator, InputIterator, Compare = Compare(), Container = Container()) |
17 | | - -> priority_queue< |
18 | | - typename iterator_traits<InputIterator>::value_type, |
19 | | - Container, Compare>; // (2) |
| 21 | + -> priority_queue<iter_val_t<InputIterator>, Container, Compare>; // (2) |
| 22 | + |
| 23 | + template <ranges::input_range R, class Compare = less<ranges::range_value_t<R>>> |
| 24 | + priority_queue(from_range_t, R&&, Compare = Compare()) |
| 25 | + -> priority_queue<ranges::range_value_t<R>, |
| 26 | + vector<ranges::range_value_t<R>>, Compare>; // (3) C++23から |
20 | 27 |
|
21 | 28 | template <class Compare, class Container, class Allocator> |
22 | 29 | priority_queue(Compare, Container, Allocator) |
23 | | - -> priority_queue<typename Container::value_type, Container, Compare>; // (3) |
| 30 | + -> priority_queue<typename Container::value_type, Container, Compare>; // (4) |
| 31 | + |
| 32 | + template <class InputIterator, class Allocator> |
| 33 | + priority_queue(InputIterator, InputIterator, Allocator) |
| 34 | + -> priority_queue<iter_val_t<InputIterator>, |
| 35 | + vector<iter_val_t<InputIterator>, Allocator>, |
| 36 | + less<iter_val_t<InputIterator>>>; // (5) C++23から |
| 37 | + |
| 38 | + template <class InputIterator, class Compare, class Allocator> |
| 39 | + priority_queue(InputIterator, InputIterator, Compare, Allocator) |
| 40 | + -> priority_queue<iter_val_t<InputIterator>, |
| 41 | + vector<iter_val_t<InputIterator>, Allocator>, |
| 42 | + Compare>; // (6) C++23から |
| 43 | + |
| 44 | + template <class InputIterator, class Compare, class Container, class Allocator> |
| 45 | + priority_queue(InputIterator, InputIterator, Compare, Container, Allocator) |
| 46 | + -> priority_queue<typename Container::value_type, Container, Compare>; // (7) C++23から |
| 47 | + |
| 48 | + template <ranges::input_range R, class Compare, class Allocator> |
| 49 | + priority_queue(from_range_t, R&&, Compare, Allocator) |
| 50 | + -> priority_queue<ranges::range_value_t<R>, |
| 51 | + vector<ranges::range_value_t<R>, Allocator>, |
| 52 | + Compare>; // (8) C++23から |
| 53 | + |
| 54 | + template <ranges::input_range R, class Allocator> |
| 55 | + priority_queue(from_range_t, R&&, Allocator) |
| 56 | + -> priority_queue<ranges::range_value_t<R>, |
| 57 | + vector<ranges::range_value_t<R>, Allocator>>; // (9) C++23から |
24 | 58 | } |
25 | 59 | ``` |
26 | 60 | * iterator_traits[link /reference/iterator/iterator_traits.md] |
27 | 61 | * less[link /reference/functional/less.md] |
| 62 | +* vector[link /reference/vector/vector.md] |
| 63 | +* ranges::input_range[link /reference/ranges/input_range.md] |
| 64 | +* ranges::range_value_t[link /reference/ranges/range_value_t.md] |
| 65 | +* from_range_t[link /reference/ranges/from_range_t.md] |
28 | 66 |
|
29 | 67 | ## 概要 |
30 | 68 | `std::priority_queue`クラステンプレートの型推論補助。 |
31 | 69 |
|
32 | 70 | - (1) : 比較関数オブジェクトと、元となるコンテナから推論する |
33 | 71 | - (2) : イテレータ範囲、比較関数オブジェクト、元となるコンテナから推論する |
34 | | -- (3) : 比較関数オブジェクトと、元となるコンテナ、アロケータから推論する |
| 72 | +- (3) : Rangeと比較関数オブジェクトから推論する |
| 73 | +- (4) : 比較関数オブジェクトと、元となるコンテナ、アロケータから推論する |
| 74 | +- (5) : イテレータ範囲とアロケータから推論する |
| 75 | +- (6) : イテレータ範囲、比較関数オブジェクト、アロケータから推論する |
| 76 | +- (7) : イテレータ範囲、比較関数オブジェクト、元となるコンテナ、アロケータから推論する |
| 77 | +- (8) : Range、比較関数オブジェクト、元となるコンテナから推論する |
| 78 | +- (9) : Rangeとアロケータから推論する |
35 | 79 |
|
36 | 80 |
|
37 | 81 | ## 例 |
|
0 commit comments