deduction guides for
std::priority_queue
|
Definido en el encabezado
<queue>
|
||
|
template
<
class
Comp,
class
Container
>
priority_queue
(
Comp, Container
)
|
(1) | (desde C++17) |
|
template
<
class
InputIt,
class
Comp
=
std::
less
<
/*iter-val-t*/
<
InputIt
>>
,
|
(2) | (desde C++17) |
|
template
<
class
Comp,
class
Container,
class
Alloc
>
priority_queue
(
Comp, Container, Alloc
)
|
(3) | (desde C++17) |
|
template
<
class
InputIt,
class
Alloc
>
priority_queue
(
InputIt, InputIt, Alloc
)
|
(4) | (desde C++17) |
|
template
<
class
InputIt,
class
Comp,
class
Alloc
>
priority_queue
(
InputIt, InputIt, Comp, Alloc
)
|
(5) | (desde C++17) |
|
template
<
class
InputIt,
class
Comp,
class
Container,
class
Alloc
>
priority_queue
(
InputIt, InputIt, Comp, Container, Alloc
)
|
(6) | (desde C++17) |
|
template
<
ranges::
input_range
R,
class
Comp
=
std::
less
<
ranges::
range_value_t
<
R
>>
>
|
(7) | (desde C++23) |
|
template
<
ranges::
input_range
R,
class
Comp,
class
Alloc
>
priority_queue
(
std::
from_range_t
, R
&&
, Comp, Alloc
)
|
(8) | (desde C++23) |
|
template
<
ranges::
input_range
R,
class
Alloc
>
priority_queue
(
std::
from_range_t
, R
&&
, Alloc
)
|
(9) | (desde C++23) |
|
Alias de tipos auxiliares solo para exposición
|
||
|
template
<
class
InputIt
>
using
/*iter-val-t*/
=
|
( solo para exposición* ) | |
Las siguientes guías de deducción están proporcionadas para std::priority_queue :
Estas sobrecargas participan en la resolución de sobrecarga solo si
-
InputItsatisface LegacyInputIterator , -
Compno satisface Allocator , -
Containerno satisface Allocator , -
para las sobrecargas
(
4,5
)
,
(desde C++23)
Allocsatisface Allocator , y - para las sobrecargas ( 3,6 ) , std:: uses_allocator_v < Container, Alloc > es true .
Nota: el grado en que la biblioteca determina que un tipo no satisface
LegacyInputIterator
no está especificado, excepto que como mínimo los tipos integrales no califican como iteradores de entrada. Del mismo modo, el grado en que determina que un tipo no satisface
Allocator
no está especificado, excepto que como mínimo el tipo miembro
Alloc::value_type
debe existir y la expresión
std::
declval
<
Alloc
&
>
(
)
.
allocate
(
std::
size_t
{
}
)
debe estar bien formada cuando se trata como un operando no evaluado.
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construcción e inserción con reconocimiento de rangos; sobrecargas ( 7-9 ) |
Ejemplo
#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}; // deduce 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()}; // deduce std::priority_queue<int> for (; !pq2.empty(); pq2.pop()) std::cout << pq2.top() << ' '; std::cout << '\n'; }
Salida:
1 2 3 4 4 3 2 1
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3506 | C++17 | faltaban las guías de deducción del iterador y el asignador de memoria | añadidas, ( 4-6 ) |