标签:示例 模板 排序 names pac nal 重载 value nod
在 c++ 的 stl 库中有封装好的 优先队列
1.
priority_queue<int>que; // 最普通的优先队列,默认优先取出最大的元素
2 .
priority_queue<int, vector<int>, greater<int> >que; // 最普通的优先队列,默认优先取出最小的元素, 若将greater 改为 less ,优先取出最大的元素
3.
priority_queue<node>que; // 结构体中必须要写运算重载符
模板:
#include<iostream>
#include<functional>
#include<queue>
using namespace std;
struct node
{
friend bool operator< (node n1, node n2)
{
return n1.priority < n2.priority; //"<"为从大到小排列,">"为从小到大排列
}
int priority;
int value;
};
int main()
{
const int len = 5; //也可以写在函数内
int i;
int a[len] = {3,5,9,6,2};
//示例1
priority_queue<int> qi; //普通的优先级队列,按从大到小排序
for(i = 0; i < len; i++)
qi.push(a[i]);
for(i = 0; i < len; i++)
{
cout<<qi.top()<<" ";
qi.pop();
}
cout<<endl;
//示例2
priority_queue<int, vector<int>, greater<int> > qi2; //从小到大的优先级队列,可将greater改为less,即为从大到小
for(i = 0; i < len; i++)
qi2.push(a[i]);
for(i = 0; i < len; i++)
{
cout<<qi2.top()<<" ";
qi2.pop();
}
cout<<endl;
//示例3
priority_queue<node> qn; //必须要重载运算符
node b[len];
b[0].priority = 6; b[0].value = 1;
b[1].priority = 9; b[1].value = 5;
b[2].priority = 2; b[2].value = 3;
b[3].priority = 8; b[3].value = 2;
b[4].priority = 1; b[4].value = 4;
for(i = 0; i < len; i++)
qn.push(b[i]);
cout<<"优先级"<<‘\t‘<<"值"<<endl;
for(i = 0; i < len; i++)
{
cout<<qn.top().priority<<‘\t‘<<qn.top().value<<endl;
qn.pop();
}
return 0;
}
标签:示例 模板 排序 names pac nal 重载 value nod
原文地址:http://www.cnblogs.com/ccut-ry/p/7777559.html