优先队列
在 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; }
东北日出西边雨 道是无情却有情