Como implementar uma fila prioritária em C ++



Este artigo fornecerá um conhecimento detalhado e abrangente sobre como implementar uma fila de prioridades em C ++ com exemplos.

Uma fila prioritária é um contêiner no STL. É semelhante à fila, exceto pelo fato de que cada elemento da fila de prioridade tem certa prioridade e quando retiramos elementos da fila de prioridade, os elementos com a prioridade mais alta são removidos primeiro. Como a fila de prioridade, existem 10 tipos diferentes de contêineres em STL . Um contêiner é um objeto que armazena dados. Os contêineres STL são implementados com a ajuda de classes de modelo, portanto, personalizá-los para conter diferentes tipos de dados é fácil. Nesta postagem, discutiremos a fila de prioridade e os conceitos relacionados a ela em detalhes. As dicas a seguir serão abordadas neste artigo Fila prioritária em C ++,

Continuando com este artigo sobre Fila prioritária em C ++





Componentes de STL

STL consiste em classes e funções de template que podem ser usadas como uma abordagem padrão para armazenar e processar dados. Vamos discutir os componentes do STL

Recipientes- Existem 10 tipos de contêineres definidos no STL e eles são agrupados em 3 categorias. Destas 3, as filas prioritárias pertencem à categoria do contêiner derivado. Cada classe de contêiner tem seu próprio conjunto de funções que podem ser usadas para manipular os dados.



Algoritmo - Um algoritmo é um método usado para processar os dados presentes no objeto recipiente. STL fornece muitos tipos diferentes de Algoritmos que podem ser usados ​​na inicialização, pesquisa, classificação, fusão, cópia. Algoritmos são implementados com a ajuda de funções de modelo.

Iterator- Um iterador é um objeto que aponta para um elemento no contêiner. Os iteradores podem ajudar na movimentação pelo conteúdo de um contêiner. Iteradores são como ponteiros que podem ser aumentados e diminuídos. Ele atua como um link entre o algoritmo e o contêiner. Iteradores são usados ​​para manipular os dados armazenados em um contêiner.

Continuando com este artigo sobre Fila prioritária em C ++



Heaps e fila de prioridade

Como vimos anteriormente, Priority Queue pertence à categoria de contêineres derivados. Outros membros desta categoria são pilha e fila. Esses contêineres derivados também são conhecidos como adaptadores de contêiner.

Pilha, fila e fila de prioridade são conhecidos como contêineres derivados, pois são feitos de contêineres de sequência diferentes. Esses contêineres não suportam nenhum tipo de iterador, eles não são usados ​​para manipulação de dados.

como criar pacote em java

O que exatamente é uma fila prioritária?

Em palavras simples, é um contêiner que usamos para armazenar dados. Cada elemento dos dados armazenados recebe alguma prioridade, o que pode nos ajudar a armazenar os dados em uma ordem lógica.
Sintaxe:priority_queue variable_name

É importante incluir um arquivo de cabeçalho no programa para usar uma fila prioritária.

fila de prioridade em c ++Por exemplo, se adicionarmos 2, 10, 30, 5, 6 em nossa fila de prioridade usando a função push e, em seguida, pop os elementos usando a função pop, a saída será 30, 10, 6, 5, 2.

Ok, agora sabemos o propósito ou o uso da fila de prioridade. Mas como ele sabia se 30> 10? Está fazendo algum tipo de classificação? Nesse ponto, Heaps entram em cena. Para saber mais sobre os heaps, consulte este artigo.

Pilhas- Pilhas são estruturas semelhantes a árvores. Com base em como os nós dos elementos filhos são organizados em um heap em relação aos nós pais, os heaps são subdivididos em 2 partes

1. Min Heap- Em Min Heap, o valor do nó pai é menor ou igual ao valor dos nós filhos.

2 Max Heap- Em Max Heap, o valor do nó pai é maior ou igual ao valor dos nós filhos.

Nota- A fila de prioridade não classifica os elementos usando algum algoritmo de classificação, em vez disso, armazena os dados na forma de um heap.

Continuando com este artigo sobre Fila prioritária em C ++

Imprimir todos os elementos de uma fila prioritária

Depois de entender os fundamentos da fila de prioridade, vamos implementar programas para entender os métodos mais comumente usados ​​com uma fila de prioridade

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Resultado:

30 15 10 9 6 2

No programa acima, usamos as funções pop (), top () e push () que são usadas na maioria das vezes ao lidar com uma fila de prioridade. Vamos dar uma olhada em alguns dos métodos que podemos usar com uma fila prioritária

Tamanho( ): Esta função retorna o tamanho da fila de prioridade

vazio (): Esta função é usada para verificar se a fila de prioridade está vazia ou não. Ele retorna verdadeiro se a fila de prioridade está vazia.

empurrar( ): Insere um elemento na Fila de prioridade.

pop (): Esta função remove o elemento superior da fila de prioridade que é o elemento com a prioridade mais alta.

implementação de classificação de mesclagem c ++

troca( ): Esta função troca os elementos da fila de prioridade por outra fila de prioridade. A função usa uma fila de prioridade como parâmetro.

emplace (): Esta função é usada para adicionar um elemento ao topo da fila de prioridade.

Vejamos mais um programa.

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Resultado:

2 6 7 9 10 15 30

Com isso, chegamos ao fim deste artigo Fila de prioridade em C ++. Se você deseja saber mais, confira o pela Edureka, uma empresa de aprendizagem online confiável. O curso de certificação e treinamento Java J2EE e SOA da Edureka foi projetado para treiná-lo tanto para os conceitos básicos e avançados do Java, juntamente com várias estruturas Java como Hibernate e Spring.

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog e entraremos em contato com você o mais breve possível.