Aula por Matheo Angelo
Esta aula vai te ensinar a usar uma estrutura de dados muito importante, a Priority Queue, ou Fila de Prioridade. Essa estrutura funciona de maneira semelhante à Queue, já que as operações principais são inserir um elemento e checar (ou remover) o elemento da frente, mas com uma exceção bastante interessante: o maior elemento é sempre o primeiro da fila. Ou seja, os elementos ficam ordenados de acordo com a prioridade.
A sintaxe usada para declarar uma Priority Queue é semelhante à das outras estruturas de dados da STL.
#include<iostream> | |
#include<queue> // biblioteca da Priority Queue | |
using namespace std; | |
int main() | |
{ | |
// priority_queue< tipo_de_variavel > nome_da_priority_queue; | |
priority_queue<int> fila; | |
return 0; | |
} |
Vamos agora comentar sobre as funções mais importantes que já vêm implementadas na biblioteca STL do C++!
Adicionar um elemento na fila:
Para adicionar um elemento à fila de prioridade, basta usar o comando push(). Inserir elementos na Priority Queue tem complexidade $O(log \ N)$. Vale lembrar que a notação $log \ N$, neste curso, significa $log_{{}_2} \ N$.
priority_queue<int> fila; | |
// Adiciona os elemntos em fila | |
fila.push(3); | |
fila.push(1); | |
fila.push(2); | |
// Ao final a priority queue vai conter os elementos 3, 2 e 1 nessa ordem. |
Checar o elemento na frente da fila:
O primeiro elemento da fila pode ser acessado através da função top().
priority_queue<int> fila; | |
fila.push(3); | |
fila.push(1); | |
fila.push(2); | |
cout << fila.top() << "\n"; | |
// O programa irá imprimir o número 3, que é o | |
// elemento que está na frente, no topo, da fila. |
Tirar o elemento na frente da fila:
Para remover o elemento na frente da fila, ou seja, fazer “a fila andar”, usa-se o comando pop().
priority_queue<int> fila; | |
fila.push(3); | |
fila.push(1); | |
fila.push(2); | |
fila.pop(); // Remove o primeiro elemento da fila, ou seja, o 3. | |
cout << fila.top() << "\n"; | |
// O programa irá imprimir o número 2, | |
// que é agora o elemento da frente |
Obter o tamanho da fila:
A função size() retorna a quantidade de elementos na fila atualmente.
priority_queue<int> fila; | |
fila.push(5); | |
fila.push(10); | |
cout << fila.size() << "\n"; // nesse caso, a fila tem 2 elementos |
Saber se a fila está vazia:
A função empty() retorna um valor de true (Verdadeiro) se a fila estiver vazia, ou false (Falso) caso haja pelo menos 1 elemento nela.
priority_queue<int> fila; | |
if(fila.empty()) // Aqui a fila está vazia, já que nada foi inserido ainda | |
{ | |
cout << "Vazia\n"; | |
} | |
fila.push(3); // A partir deste momento a fila não está mais vazia | |
// Então, fila.empty() retornará Falso | |
if(fila.empty()) // Como a fila não está vazia não entraremos nesse if | |
{ | |
cout << "Vazia\n"; | |
} | |
// Logo, o código so irá imprimir "Vazio" uma unica vez |
Uma observação interessante é que se quisermos checar se a fila não está vazia podemos usar o operador lógico de negação (!), ou seja, iremos fazer !fila.empty(). Isso funciona porque, se a fila tiver vazia fila.empty() irá retornar Verdadeiro e a negação de Verdeiro é Falso, ou se a fila não estiver vazia fila.empty() irá retornar Falso e a negação de Falso é Verdadeiro. Observe o código abaixo para maior compreensão:
priority_queue<int> fila; | |
if(!fila.empty()) // Aqui a fila está vazia, já que nada foi inserido ainda | |
{ | |
cout << "Não está vazia\n"; | |
} | |
// Note que o código não irá entrar na checagem anterior | |
fila.push(3); // A partir deste momento a fila não está mais vazia | |
// Então, !fila.empty() retornará Verdadeiro | |
if(fila.empty()) // Como a fila não está vazia o código entrar nessa checagem | |
{ | |
cout << "Não está vazia\n"; | |
} | |
// Logo, o código so irá imprimir "Não está vazia" uma unica vez. |
Se você quiser ver direitinho tudo que a Priority Queue faz, da uma olhada no C++ Reference clicando aqui.
Para dar aquela testada nos seus conhecimentos recém adquiridos, segue alguns problemas para você se divertir.
Deseja voltar para página do Curso de Informática, então clique aqui.