logo

Fila de prioridade em C++

A fila de prioridade em C++ é um contêiner derivado em STL que considera apenas o elemento de prioridade mais alta. A fila segue a política FIFO enquanto a fila de prioridade exibe os elementos com base na prioridade, ou seja, o elemento de maior prioridade é exibido primeiro.

É semelhante à fila comum em certos aspectos, mas difere nos seguintes aspectos:

  • Numa fila de prioridade, cada elemento da fila está associado a alguma prioridade, mas a prioridade não existe numa estrutura de dados de fila.
  • O elemento com a prioridade mais alta em uma fila de prioridade será removido primeiro, enquanto a fila segue o FIFO (primeiro a entrar, primeiro a sair) política significa que o elemento inserido primeiro será excluído primeiro.
  • Se existir mais de um elemento com a mesma prioridade, então a ordem do elemento em uma fila será levada em consideração.

Nota: A fila de prioridade é a versão estendida de uma fila normal, exceto que o elemento com a prioridade mais alta será removido primeiro da fila de prioridade.

Sintaxe da fila de prioridade

 priority_queue variable_name; 

Vamos entender a fila de prioridade através de um exemplo simples.

Fila de prioridade em C++

Na ilustração acima, inserimos os elementos usando uma função push() e a operação de inserção é idêntica à fila normal. Mas quando excluímos o elemento da fila usando uma função pop(), o elemento com maior prioridade será excluído primeiro.

Função de membro da fila prioritária

Função Descrição
empurrar() Insere um novo elemento em uma fila de prioridade.
pop() Remove o elemento superior da fila, que tem a prioridade mais alta.
principal() Esta função é usada para endereçar o elemento superior de uma fila de prioridade.
tamanho() Determina o tamanho de uma fila de prioridade.
vazio() Verifica se a fila está vazia ou não. Com base na verificação, ele retorna o status.
trocar() Ele troca os elementos de uma fila prioritária por outra fila de mesmo tipo e tamanho.
localização() Insere um novo elemento no topo da fila de prioridade.

Vamos criar um programa simples de fila de prioridade.

 #include #include using namespace std; int main() { priority_queue p; // variable declaration. p.push(10); // inserting 10 in a queue, top=10 p.push(30); // inserting 30 in a queue, top=30 p.push(20); // inserting 20 in a queue, top=20 cout&lt;<'number of elements available in 'p' :'<<p>In the above code, we have created a priority queue in which we insert three elements, i.e., 10, 30, 20. After inserting the elements, we display all the elements of a priority queue by using a while loop.<p></p> <p> <strong>Output</strong> </p> <pre> Number of elements available in &apos;p&apos; :3 30 20 10 zzzzz/ </pre> <p> <strong>Let&apos;s see another example of a priority queue.</strong> </p> <pre> #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } </pre> <p>In the above code, we have declared two priority queues, i.e., p and q. We inserted four elements in &apos;p&apos; priority queue and four in &apos;q&apos; priority queue. After inserting the elements, we swap the elements of &apos;p&apos; queue with &apos;q&apos; queue by using a swap() function.</p> <p> <strong>Output</strong> </p> <pre> Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1 </pre> <hr></'number>

Vejamos outro exemplo de fila prioritária.

 #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } 

No código acima, declaramos duas filas de prioridade, ou seja, p e q. Inserimos quatro elementos na fila de prioridade 'p' e quatro na fila de prioridade 'q'. Após inserir os elementos, trocamos os elementos da fila 'p' pela fila 'q' usando uma função swap().

Saída

 Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1