deduction guides for
std::priority_queue
|
Défini dans l'en-tête
<queue>
|
||
|
template
<
class
Comp,
class
Container
>
priority_queue
(
Comp, Container
)
|
(1) | (depuis C++17) |
|
template
<
class
InputIt,
class
Comp
=
std::
less
<
/*iter-val-t*/
<
InputIt
>>
,
|
(2) | (depuis C++17) |
|
template
<
class
Comp,
class
Container,
class
Alloc
>
priority_queue
(
Comp, Container, Alloc
)
|
(3) | (depuis C++17) |
|
template
<
class
InputIt,
class
Alloc
>
priority_queue
(
InputIt, InputIt, Alloc
)
|
(4) | (depuis C++17) |
|
template
<
class
InputIt,
class
Comp,
class
Alloc
>
priority_queue
(
InputIt, InputIt, Comp, Alloc
)
|
(5) | (depuis C++17) |
|
template
<
class
InputIt,
class
Comp,
class
Container,
class
Alloc
>
priority_queue
(
InputIt, InputIt, Comp, Container, Alloc
)
|
(6) | (depuis C++17) |
|
template
<
ranges::
input_range
R,
class
Comp
=
std::
less
<
ranges::
range_value_t
<
R
>>
>
|
(7) | (depuis C++23) |
|
template
<
ranges::
input_range
R,
class
Comp,
class
Alloc
>
priority_queue
(
std::
from_range_t
, R
&&
, Comp, Alloc
)
|
(8) | (depuis C++23) |
|
template
<
ranges::
input_range
R,
class
Alloc
>
priority_queue
(
std::
from_range_t
, R
&&
, Alloc
)
|
(9) | (depuis C++23) |
|
Alias de types d'aide uniquement d'exposition
|
||
|
template
<
class
InputIt
>
using
/*iter-val-t*/
=
|
( exposition uniquement* ) | |
Les guides de déduction suivants suivants sont fournis pour std::priority_queue :
Ces surcharges participent à la résolution de surcharge seulement si
-
InputItsatisfait LegacyInputIterator , -
Compne satisfait pas Allocator , -
Containerne satisfait pas Allocator , -
pour les surcharges
(
4,5
)
,
(depuis C++23)
Allocsatisfait Allocator , et - pour les surcharges ( 3,6 ) , std:: uses_allocator_v < Container, Alloc > est true .
Note : la mesure dans laquelle la bibliothèque détermine qu'un type ne satisfait pas
LegacyInputIterator
n'est pas spécifiée, sauf qu'au minimum les types entiers ne se qualifient pas comme itérateurs d'entrée. De même, la mesure dans laquelle elle détermine qu'un type ne satisfait pas
Allocator
n'est pas spécifiée, sauf qu'au minimum le type membre
Alloc::value_type
doit exister et l'expression
std::
declval
<
Alloc
&
>
(
)
.
allocate
(
std::
size_t
{
}
)
doit être bien formée lorsqu'elle est traitée comme un opérande non évalué.
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construction et insertion compatibles avec les gammes ; surcharges ( 7-9 ) |
Exemple
#include <functional> #include <iostream> #include <queue> #include <vector> int main() { const std::vector<int> v = {1, 2, 3, 4}; std::priority_queue pq1{std::greater<int>{}, v}; // déduit std::priority_queue< // int, std::vector<int>, // std::greater<int>> for (; !pq1.empty(); pq1.pop()) std::cout << pq1.top() << ' '; std::cout << '\n'; std::priority_queue pq2{v.begin(), v.end()}; // déduit std::priority_queue<int> for (; !pq2.empty(); pq2.pop()) std::cout << pq2.top() << ' '; std::cout << '\n'; }
Sortie :
1 2 3 4 4 3 2 1
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3506 | C++17 | les guides de déduction depuis l'itérateur et l'allocateur étaient manquants | ajoutés, ( 4-6 ) |