Namespaces
Variants

deduction guides for std::priority_queue

From cppreference.net
Definido en el encabezado <queue>
template < class Comp, class Container >

priority_queue ( Comp, Container )

- > priority_queue < typename Container :: value_type , Container, Comp > ;
(1) (desde C++17)
template < class InputIt,

class Comp = std:: less < /*iter-val-t*/ < InputIt >> ,
class Container = std:: vector < /*iter-val-t*/ < InputIt > >
priority_queue ( InputIt, InputIt, Comp = Comp ( ) , Container = Container ( ) )

- > priority_queue < /*iter-val-t*/ < InputIt > , Container, Comp > ;
(2) (desde C++17)
template < class Comp, class Container, class Alloc >

priority_queue ( Comp, Container, Alloc )

- > priority_queue < typename Container :: value_type , Container, Comp > ;
(3) (desde C++17)
template < class InputIt, class Alloc >

priority_queue ( InputIt, InputIt, Alloc )
- > priority_queue < /*iter-val-t*/ < InputIt > ,
std:: vector < /*iter-val-t*/ < InputIt > , Alloc > ,

std:: less < /*iter-val-t*/ < InputIt >>> ;
(4) (desde C++17)
template < class InputIt, class Comp, class Alloc >

priority_queue ( InputIt, InputIt, Comp, Alloc )
- > priority_queue < /*iter-val-t*/ < InputIt > ,

std:: vector < /*iter-val-t*/ < InputIt > , Alloc > , Comp > ;
(5) (desde C++17)
template < class InputIt, class Comp, class Container, class Alloc >

priority_queue ( InputIt, InputIt, Comp, Container, Alloc )

- > priority_queue < typename Container :: value_type , Container, Comp > ;
(6) (desde C++17)
template < ranges:: input_range R,

class Comp = std:: less < ranges:: range_value_t < R >> >
priority_queue ( std:: from_range_t , R && , Comp = Comp ( ) )
- > priority_queue < ranges:: range_value_t < R > ,

std:: vector < ranges:: range_value_t < R >> , Comp > ;
(7) (desde C++23)
template < ranges:: input_range R, class Comp, class Alloc >

priority_queue ( std:: from_range_t , R && , Comp, Alloc )
- > priority_queue < ranges:: range_value_t < R > ,

std:: vector < ranges:: range_value_t < R > , Alloc > , Comp > ;
(8) (desde C++23)
template < ranges:: input_range R, class Alloc >

priority_queue ( std:: from_range_t , R && , Alloc )
- > priority_queue < ranges:: range_value_t < R > ,

std:: vector < ranges:: range_value_t < R > , Alloc >> ;
(9) (desde C++23)
Alias de tipos auxiliares solo para exposición
template < class InputIt >

using /*iter-val-t*/ =

typename std:: iterator_traits < InputIt > :: value_type ;
( solo para exposición* )

Las siguientes guías de deducción están proporcionadas para std::priority_queue :

1-6) Permitir deducción del tipo de contenedor subyacente y de un rango de iteradores.
7-9) Permitir deducción desde una etiqueta std::from_range_t y un input_range .

Estas sobrecargas participan en la resolución de sobrecarga solo si

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 )