优先队列的底层实现是:堆
对于堆的实现要会手写实现。
解决问题类型题: 求前K的最大(最小)的元素等问题
1.queue中的priority_queue来实现堆
#include<iostream>
#include<queue>
#include<ctime>
using namespace std;
bool myCmp(int a,int b)
{
return a%10<b%10; //比较a和b的个位数大小
}
int main()
{
srand(time(NULL));
priority_queue<int> pq; //默认最大堆,从大到小
for(int i =0;i<10;i++)
{
int num=rand()%100; //从0-99
pq.push(num);
cout<<"insert"<<num<<"in priority queue."<<endl;
}
while(!pq.empty())
{
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
priority_queue<int,vector<int>,greater<int>> pq2; //最小堆,从小到大
for(int i =0;i<10;i++)
{
int num=rand()%100; //从0-99
pq2.push(num);
cout<<"insert"<<num<<"in priority queue."<<endl;
}
while(!pq2.empty())
{
cout<<pq2.top()<<" ";
pq2.pop();
}
cout<<endl;
//使用自定义Comparator的priority queue
priority_queue<int,vector<int>,function<bool>(int,int)> pq3(myCmp);
for(int i =0;i<10;i++)
{
int num=rand()%100; //从0-99
pq3.push(num);
cout<<"insert"<<num<<"in priority queue."<<endl;
}
while(!pq3.empty())
{
cout<<pq3.top()<<" ";
pq3.pop();
}
cout<<endl;
return 0;
}
2.C++中还可以直接创建堆