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.
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<<'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 'p' :3 30 20 10 zzzzz/ </pre> <p> <strong>Let'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 '1' in p. p.push(2); // inserting element '2' in p. p.push(3); // inserting element '3' in p. p.push(4); // inserting element '4' in p. q.push(5); // inserting element '5' in q. q.push(6); // inserting element '6' in q. q.push(7); // inserting element '7' in q. q.push(8); // inserting element '8' in q. p.swap(q); std::cout << 'Elements of p are : ' << std::endl; while(!p.empty()) { std::cout << p.top() << std::endl; p.pop(); } std::cout << 'Elements of q are :' << std::endl; while(!q.empty()) { std::cout << q.top() << 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 'p' priority queue and four in 'q' priority queue. After inserting the elements, we swap the elements of 'p' queue with 'q' 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 '1' in p. p.push(2); // inserting element '2' in p. p.push(3); // inserting element '3' in p. p.push(4); // inserting element '4' in p. q.push(5); // inserting element '5' in q. q.push(6); // inserting element '6' in q. q.push(7); // inserting element '7' in q. q.push(8); // inserting element '8' in q. p.swap(q); std::cout << 'Elements of p are : ' << std::endl; while(!p.empty()) { std::cout << p.top() << std::endl; p.pop(); } std::cout << 'Elements of q are :' << std::endl; while(!q.empty()) { std::cout << q.top() << 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
'number>