優先佇列(Priority_queue
2014-07-20 16:09
465 查看
priority_queue的函數
empty() 如果優先佇列為空,則返回真
pop() 刪除第一個元素
push() 加入一個元素
size() 返回優先佇列中擁有的元素的個數
top() 返回優先佇列中有最高優先順序的元素 //這點要注意,不是front()
要注意的是priority_queue中的三個參數,後兩個可以省去,因為有默認參數,如果有第三個參數的話,必定要寫第二個參數。
priority_queue和一般的queue不一樣的是取head元素,一般的queue是q.front(),priority_queue是q.top()
STL中priority_queue默認是大根堆
要改變priority_queue中的優先級排序方法,我看到網上一般有兩種:
empty() 如果優先佇列為空,則返回真
pop() 刪除第一個元素
push() 加入一個元素
size() 返回優先佇列中擁有的元素的個數
top() 返回優先佇列中有最高優先順序的元素 //這點要注意,不是front()
要注意的是priority_queue中的三個參數,後兩個可以省去,因為有默認參數,如果有第三個參數的話,必定要寫第二個參數。
priority_queue和一般的queue不一樣的是取head元素,一般的queue是q.front(),priority_queue是q.top()
STL中priority_queue默認是大根堆
要改變priority_queue中的優先級排序方法,我看到網上一般有兩種:
方法1: 小根堆:greater<TYPE> 大根堆:less<TYPE>要改寫比較函數一定要把三個參數都帶進去 priority_queue<int,vector<int>,greater<int> >q; //最後兩個> >之間要有空格 方法2: struct cmp{ bool operator()(const int &a,const int &b) { return a>b;//按降序排序,小根堆 } }; priority_queue<int,vector<int>,cmp>q; //定義的時候要把cmp放到第三個參數的位置 //poj3253用到 如果優先隊列的類型是struct而非integer等一般類型則可以 struct mse{ char msg[30]; int pri,para,k; }message; bool operator<(mse a,mse b) //重新定義< { if(a.pri==b.pri) return a.k>b.k; return a.pri>b.pri; } //第一優先級是pri,第二優先級是k,pri越小優先級越大;如果pri相等,則比較k,k越小優先級越大 priority_queue<mse>q; //定義mse的priority_queue //poj_2724用到
相关文章推荐
- 优先队列(priority_queue)
- priority_queue<int>q;
- c++stl的queue和priority_queue
- C++之priority_queue
- 让priority_queue支持小根堆的几种方法
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)
- 【转】优先队列priority_queue 用法详解
- Android Priority Job Queue (Job Manager)(一)
- 并发队列-无界阻塞优先级队列PriorityBlockingQueue原理探究
- STL之priority_queue实现
- priority_queue 用法总结
- (46) PriorityQueue / 计算机程序的思维逻辑
- 合并果子 - priority_queue
- stl之List 、priority_queue、set:仿函数,pair查返回值、multiset
- priority_queue中cmp函数的用法
- priority_queue优先队列的一些用法
- C++的STL容器之容器适配器:stack、queue、priority_queue
- 【BZOJ2006】超级钢琴(RMQ,priority_queue)
- 标准模板库(STL)学习指南之priority_queue优先队列
- STL priority_queue 总结