A fila de prioridade stl padrão é Max one (a função Top retorna o maior elemento).
Digamos, para simplificar, que é uma fila de prioridade de valores int.
c++
stl
priority-queue
Amitlicht
fonte
fonte
operator>
, o que funcionaria perfeitamente comstd::greater
. Você também pode escrever seu próprio functor ao invés de,std::greater
se desejar.operator<
;)vector
edeque
cumprem os requisitos que um contêiner subjacente deve atender para uma priority_queue. Você também pode usar uma classe de contêiner personalizada. Você pode encontrar uma explicação muito elaborada em cplusplus.com/reference/queue/priority_queueUma maneira seria definir um comparador adequado com o qual operar na fila de prioridade comum, de modo que sua prioridade seja revertida:
Que produziria 1, 3, 5, 8, respectivamente.
Alguns exemplos do uso de filas de prioridade via STL e implementações do Sedgewick são fornecidos aqui .
fonte
O terceiro parâmetro do modelo
priority_queue
é o comparador. Defina-o para usargreater
.por exemplo
Você vai precisar
#include <functional>
parastd::greater
.fonte
Você pode fazer isso de várias maneiras:
1. Usando
greater
como função de comparação:2. Inserindo valores alterando seu sinal (usando menos (-) para número positivo e usando mais (+) para número negativo:
3. Usando uma estrutura ou classe personalizada:
4. Usando uma estrutura ou classe personalizada, você pode usar priority_queue em qualquer ordem. Suponha que desejamos classificar as pessoas em ordem decrescente de acordo com seu salário e, se houver vínculo, de acordo com sua idade.
O mesmo resultado pode ser obtido por sobrecarga do operador:
Na função principal:
fonte
bool operator > (const people & p)const
em 5) sobrecarga do operador<
sobrecarregado assim, é melhor sobrecarregar>
e usargreater<people>
No C ++ 11, você também pode criar um alias para sua conveniência:
E use-o assim:
fonte
Uma maneira de resolver esse problema é empurrar o negativo de cada elemento em priority_queue para que o maior elemento se torne o menor elemento. Na hora de fazer a operação pop, pegue a negação de cada elemento.
fonte
Com base acima de todas as respostas, criei um código de exemplo de como criar fila de prioridade. Nota: funciona com compiladores C ++ 11 e superiores
Saída do código acima
fonte
Podemos fazer isso de várias maneiras.
Usando parâmetro comparador de modelo
Usando classe de compartimento definida usada
fonte