English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
Função | Descriçã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