English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

c++ Fila de prioridade (priority_queue)

C ++A fila de prioridade na STL é um contêiner derivado, que considera apenas o elemento de maior prioridade. A fila segue a estratégia FIFO, enquanto a fila de prioridade remove elementos com base na prioridade, ou seja, o elemento de maior prioridade é removido primeiro.

Isso é semelhante a uma fila normal em alguns aspectos, mas difere nos seguintes aspectos:

  • Em uma fila de prioridade, cada elemento está associado a uma prioridade, mas a prioridade não existe na estrutura de dados da fila.

  • O elemento com a maior prioridade na fila de prioridade será removido primeiro, e a fila segueFIFO (primeiro a entrar, primeiro a sair)Isso significa estratégiaAntesOs elementos inseridos serão removidos primeiro.

  • Se houver múltiplos elementos com a mesma prioridade, considerar a ordem do elemento na fila.

Nota: A fila de prioridade é uma versão estendida da fila normal, mas o elemento de maior prioridade será removido primeiro da fila de prioridade.

Sintaxe da fila de prioridade

priority_queue<int> variable_name;

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

Na figura acima, inserimos elementos usando a função push() e a operação de inserção é a mesma que a de uma fila normal. No entanto, quando removemos elementos da fila usando a função pop(), o elemento de maior prioridade será removido primeiro.

Membros da fila de prioridade

FunçãoDescrição
push()Ele insere um novo elemento na fila de prioridade.
pop()Ele remove o elemento de maior prioridade da fila.
top()Esta função é usada para endereçar o elemento mais alto na fila de prioridade.
size()Retorna o tamanho da fila de prioridade.
empty()Ele verifica se a fila está vazia. Com base na verificação, ele retorna o estado da fila.
swap()Ele troca o elemento da fila de prioridade com outro da mesma tipo e tamanho.
emplace()Ele insere um novo elemento no topo da fila de prioridade.

Vamos criar um programa simples de fila de prioridade.

#include <iostream>
#include<queue>
using namespace std;
int main()
{
 priority_queue<int> p;  // declaração de variáveis.
 p.push(10); // inserir 10 para a fila, top =10
 p.push(30); // inserir 30 para a fila, top =30
 p.push(20); // inserir 20 para a fila, top =20
 cout << "O número de elementos disponíveis para ''p'' é :" << p.size() << endl;
 while(!p.empty())
 {
     std::cout << p.top() << std::endl; 
     p.pop();
 }
 return 0;
}

No código acima, criamos uma fila de prioridade e inserimos três elementos, ou seja10,30,20. Após inserirmos esses elementos, usamos um loop while para exibir todos os elementos da fila de prioridade.

Resultados de Saída

O número de elementos disponíveis para ''p'' é:3
30
20
10

Vamos ver outro exemplo de fila de prioridade.

#include <iostream>
#include<queue>
using namespace std;
int main()
{
   priority_queue<int> p;  //优先队列声明
   priority_queue<int> q;  //优先队列声明
   p.push(1); // 插入 ''1'' 到 p.
   p.push(2); // 插入 ''2'' 到 p.
   p.push(3); // 插入 ''3'' 到 p.
   p.push(4); // 插入 ''4'' 到 p.
   q.push(5); // 插入 ''5'' 到 q.
   q.push(6); // 插入 ''6'' 到 q.
   q.push(7); // 插入 ''7'' 到 q.
   q.push(8); // 插入 ''8'' 到 q.
   p.swap(q);
   std::cout << "p队列元素是 :" << std::endl;
   while(!p.empty())
   {
      std::cout << p.top() << std::endl;
       p.pop();
   }
   std::cout << "q优先队列元素是 :" << 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 elementos na fila de prioridade 'q'. Após inserir os elementos, usamos a função swap() para trocar os elementos da fila 'p' com a fila 'q'.

Resultados de Saída

Elementos da fila de prioridade p são:                                                                                                             
8                                                                                                                               
7                                                                                                                               
6                                                                                                                               
5                                                                                                                               
Elementos da fila de prioridade q são:                                                                                                             
4                                                                                                                               
3                                                                                                                               
2                                                                                                                               
1