C++ STL中的 priority_queue::push() 和 priority_queue::pop()
优先队列是一种特定的容器适配器,设计得使队列的第一个元素是所有元素中最大或最小的。但在C++ STL中(默认情况下),最大的元素在队列顶部。我们还可以通过在创建优先队列时简单地传递一个额外的参数来创建具有最小元素在顶部的优先队列。
priority_queue::push()
push() 函数用于将元素插入优先队列。该元素添加到优先队列容器中,队列的大小增加 1。首先,该元素添加到后面,同时,优先队列的元素根据优先级重新排序。
时间复杂度 O(log n)
语法 :
pqueuename.push(value)
参数 :
将要插入的元素的值作为参数传递。
结果 :
向优先队列中添加与传递的参数值相同的元素。
例子:
输入 : pqueue
pqueue.push(6);
输出 : 6
输入 : pqueue = 5, 2, 1
pqueue.push(3);
输出 : 5, 3, 2, 1
错误和异常
- 如果传递的值与优先队列类型不匹配,会显示错误。
- 如果参数不引发任何异常,就不会引发任何异常。
// CPP program to illustrate
// Implementation of push() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
// Empty Queue
priority_queue<int> pqueue;
pqueue.push(3);
pqueue.push(5);
pqueue.push(1);
pqueue.push(2);
// Priority queue becomes 5, 3, 2, 1
// Printing content of queue
while (!pqueue.empty()) {
cout << ' ' << pqueue.top();
pqueue.pop();
}
}
输出:
5 3 2 1
priority_queue::pop()
pop() 函数用于移除优先队列的最顶部元素.
时间复杂度: O(log n)
语法 :
pqueuename.pop()
参数 :
没有参数。
结果 :
移除优先队列的最顶部元素。
例子:
输入 : pqueue = 3, 2, 1
myqueue.pop();
输出 : 2, 1
输入 : pqueue = 5, 3, 2, 1
pqueue.pop();
输出 : 3, 2, 1
错误和异常
- 如果传递了参数,则会显示错误。
- 如果参数不引发任何异常,就不会引发任何异常。
// CPP program to illustrate
// Implementation of pop() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
// Empty Priority Queue
priority_queue<int> pqueue;
pqueue.push(0);
pqueue.push(1);
pqueue.push(2);
// queue becomes 2, 1, 0
pqueue.pop();
pqueue.pop();
// queue becomes 0
// Printing content of priority queue
while (!pqueue.empty()) {
cout << ' ' << pqueue.top();
pqueue.pop();
}
}
输出:
0
应用 : push() 和 pop()
给出一些整数,将它们添加到优先队列中,不使用size()函数找到优先队列的大小。
输入 : 5, 13, 0, 9, 4
输出: 5
算法 1. 逐个将给定元素推入优先队列容器中。 2. 持续将优先队列中的元素弹出,直到队列为空,并增加计数器变量的值。 3. 打印计数器变量的值。
// CPP program to illustrate
// Application of push() and pop() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int c = 0;
// Empty Priority Queue
priority_queue<int> pqueue;
pqueue.push(5);
pqueue.push(13);
pqueue.push(0);
pqueue.push(9);
pqueue.push(4);
// Priority queue becomes 13, 9, 5, 4, 0
// Counting number of elements in queue
while (!pqueue.empty()) {
pqueue.pop();
c++;
}
cout << c;
}
输出:
5