La cola de prioridad stl predeterminada es Max one (la función Top devuelve el elemento más grande).
Digamos, por simplicidad, que es una cola de prioridad de valores int.
c++
stl
priority-queue
Amitlicht
fuente
fuente
operator>
, con lo que funcionaría a la perfecciónstd::greater
. También puede escribir su propio functor en lugar destd::greater
si lo desea.operator<
;)vector
ydeque
cumplen los requisitos que debe cumplir un contenedor subyacente para una priority_queue. También puede utilizar una clase de contenedor personalizada. Puede encontrar una explicación muy elaborada en cplusplus.com/reference/queue/priority_queueUna forma sería definir un comparador adecuado con el que operar en la cola de prioridad ordinaria, de modo que su prioridad se invierta:
Lo que generaría 1, 3, 5, 8 respectivamente.
Aquí se dan algunos ejemplos del uso de colas de prioridad a través de STL y las implementaciones de Sedgewick .
fuente
El tercer parámetro de plantilla para
priority_queue
es el comparador. Configúrelo para usarlogreater
.p.ej
Que necesita
#include <functional>
parastd::greater
.fuente
Puede hacerlo de varias formas:
1. Utilizando
greater
como función de comparación:2. Insertar valores cambiando su signo (usando menos (-) para un número positivo y usando más (+) para un número negativo:
3. Usando una estructura o clase personalizada:
4. Usando una estructura o clase personalizada, puede usar priority_queue en cualquier orden. Supongamos que queremos clasificar a las personas en orden descendente según su salario y, si están empatadas, según su edad.
El mismo resultado se puede obtener sobrecargando al operador:
En función principal:
fuente
bool operator > (const people & p)const
a 5) sobrecarga de operadores<
sobrecarga así, es mejor sobrecargar>
y usargreater<people>
En C ++ 11 también puede crear un alias por conveniencia:
Y utilícelo así:
fuente
Una forma de resolver este problema es presionar el negativo de cada elemento en priority_queue para que el elemento más grande se convierta en el elemento más pequeño. A la hora de realizar la operación pop, se toma la negación de cada elemento.
fuente
Basándome en todas las respuestas, creé un código de ejemplo sobre cómo crear una cola de prioridad. Nota: Funciona con compiladores C ++ 11 y superiores
Salida del código anterior
fuente
Podemos hacer esto de varias formas.
Usando el parámetro comparador de plantilla
Usando la clase de compartimiento definida usada
fuente