您的位置:首页 > 产品设计 > UI/UE

priority_queue使用

2015-08-01 21:55 405 查看
在c++的STL中priority_queue相当于堆,使用的操作有push(), pop(), top()等;

priority_queue的头文件为<queue>

使用方法及实例:

#include <iostream>
#include <queue>
#include<functional>

using namespace std;

struct node{
int idx;
int key;
node(int a=0, int b=0):idx(a), key(b){}
};

struct cmp{//使用与struct,当然修改,使之也可以适用于class
bool operator()(node a, node b){
return a.key < b.key;
}
};

template <class T>//自定义模板,实现对基类型如int, float, double等使用
struct my_less{
bool operator()(T x, T y){
return x<y;
}
};

int main(){
//1. 使用普通int类型测试
priority_queue<int, vector<int>, my_less<int>> q;
int i;
for(i=0;i<10;++i){
q.push(i);
}
q.top()=15;
cout<<"使用自定义less实现堆:"<<endl;
while(!q.empty()){
cout<<q.top()<<"\t";
q.pop();
}
cout<<endl;

//2. 使用node类型测试
cout<<"使用node实现:"<<endl;
priority_queue<node, vector<node>, cmp> p;
for(i=0;i<10;++i){
p.push(node(i, i));
}

while(!p.empty()){
cout<<p.top().key<<"\t";
p.pop();
}
cout<<endl;

//3. 默认情况下是less,且使用大根堆
cout<<"使用默认参数实现大根堆:"<<endl;
priority_queue<int> pp;//相当于priority_queue<int, vector<int>, less<int>> p_big;
for(int i=0; i<5; i++){
pp.push(i);
}
while(!pp.empty()){
cout<<pp.top()<<"\t";
pp.pop();
}
cout<<endl;

//4. 这里使用greater,且使用小根堆
cout<<"使用生成小根堆:"<<endl;
priority_queue<int, vector<int>, greater<int>> p_big;
for(int i=0; i<5; i++){
p_big.push(i);
}
while(!p_big.empty()){
cout<<p_big.top()<<"\t";
p_big.pop();
}
cout<<endl<<endl;

return 0;
}
实验结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  priority_queue C++ STL