常规用法:默认从大到小排列。
#include<iostream> #include<queue> using namespace std; priority_queue<int>que; typedef pair<int, int> P; int main() { for (int i = 0; i < 10; i++){ que.push(i); } while (!que.empty()){ cout << que.top() << ","; que.pop(); } system("pause"); return 0; }
从小到大排的做法:
1,
#include<iostream> #include<queue> #include<functional>//需要用到greater using namespace std; priority_queue<int, vector<int>, greater<int>> que; typedef pair<int, int> P; int main() { for (int i = 0; i < 10; i++){ que.push(i); } while (!que.empty()){ cout << que.top() << "," << endl; que.pop(); } system("pause"); return 0; }
2,
#include<iostream> #include<queue> using namespace std; struct cmp{ bool operator()(int x, int y){ return x > y; //x越小优先级越高 } }; priority_queue<int, vector<int>, cmp>que;//这个声明要特别注意两点:vector<int>和cmp typedef pair<int, int> P; int main() { for (int i = 0; i < 10; i++){ que.push(i); } while (!que.empty()){ cout << que.top() << ","; que.pop(); } system("pause"); return 0; }
若采用自定义结构,自定义优先排序,做法如下:
#include<iostream> #include<queue> using namespace std; struct node{ int x, y; friend bool operator<(node a, node b){//标准库默认使用 < 来确认它们的关系,换成>就不行了哦 return a.y>b.y;//>表示越小越优先,<表示越大越优先 } //可以这样记:最大堆与小于号有关,最小堆与大于号有关。这样记会不会好一点呢。。。 }; priority_queue<node> que; typedef pair<int, int> P; int main() { node v; for (int i = 0; i < 10; i++){ v.x = i; v.y = 10 - i; que.push(v); } while (!que.empty()){ cout << que.top().x << "," << que.top().y << endl; que.pop(); } system("pause"); return 0; }
原文:http://www.cnblogs.com/littlehoom/p/3550469.html