在C ++ STL中的priority_queue :: top()
优先队列是一种容器适配器,专门设计为队列的第一个元素是队列中所有元素中最大或最小的。通常,元素按优先级排序。但是在C ++ STL中,默认情况下,顶部元素是最大元素。创建优先队列时,我们还可以通过传递附加参数来使最小元素位于顶部。它类似于最小/最大堆。
priority_queue :: top()
top()函数用于引用优先队列的顶部元素。默认情况下,C ++ STL中的顶(默认)元素是最大元素。
但是在其他编程语言中,例如Java,默认情况下创建小堆,并且top()给出最小元素。
语法:
pqueuename.top()
参数:
不需要传递任何值作为参数。
返回:
优先级队列容器中的顶部(默认情况下是最大元素)
直接参考。
例子:
输入:pqueue.push(5);
pqueue.push(1);
pqueue.top();
输出:5
输入:pqueue.push(5);
pqueue.push(1);
pqueue.push(7);
pqueue.top();
输出:7
错误和异常 1.如果优先队列容器为空,则会导致未定义的行为2.如果优先队列不为空,则不会引发任何异常
// CPP program to illustrate
// Implementation of top() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> pqueue;
pqueue.push(5);
pqueue.push(1);
pqueue.push(7);
// Priority queue top
cout << pqueue.top();
return 0;
}
输出:
7
时间复杂度: O(1)
辅助空间: O(n)
应用: 给定整数的优先队列,查找素数和非素数的数量。
输入:8、6、3、2、1
输出:素数-2
非质数-3
算法 1.将优先队列的大小输入变量中。 2.检查优先队列是否为空,检查顶部元素是否为素数,如果素数增加素数计数器并弹出顶部元素。 3.重复此步骤,直到优先队列为空。 4.打印变量prime和nonprime(size-prime)的最终值。
// CPP program to illustrate
// Application of top() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int prime = 0,nonprime = 0,size;
priority_queue<int> pqueue;
pqueue.push(1);
pqueue.push(8);
pqueue.push(3);
pqueue.push(6);
pqueue.push(2);
size = pqueue.size();
// Priority queue becomes 1, 8, 3, 6, 2
while(!pqueue.empty()) {
for (int i = 2; i <= pqueue.top() / 2; ++i) {
if (pqueue.top() % i == 0) {
prime++;
break;
}
}
pqueue.pop();
}
cout << "Prime - " << prime << endl;
cout << "Non Prime - " << size - prime;
return 0;
}
输出:
素数-2
非质数-3
时间复杂度: O(nlogn)
辅助空间: O(1)