c++学习之优先队列(priority_queue)

来源:互联网 发布:麒麟970和高通835知乎 编辑:程序博客网 时间:2024/05/18 13:25

优先队列的思想是比较简单的,就是在队列的基础上按照某一特定元素进出队列,计算机中作业的优先调度,就是按照作业的权值优先,先出队列。在STL容器中,优先队列的实现是使用的heap,也就是堆,用一个二叉堆维护一个优先队列,具体的堆的使用方法不做介绍,主要是了解priority_queue的基本使用方法及一点需要注意的地方。基本使用方法和其他的容器一样,需要将模版具象化,也就是指明类型,然后通过接口调用即可,下面的连接是STL中priority_queue的基本介绍,接口还有范例:http://www.cplusplus.com/reference/queue/priority_queue/

    自己也随手写了几行代码,留作以后作为参考范例:

#include <iostream>#include <queue>#include <string>using namespace std;struct TestType{int cnt;string num;friend bool operator < (const TestType &t1,const TestType &t2){return t1.num < t2.num;}};/*重载函数操作符*/template <typename Type>struct cmp{//t1 < t2时,按照<号的降序排序, t2 < t1时按照 < 号的升序排列bool operator() (const Type &t1, const Type &t2){return t2 < t1;}};int main(){priority_queue< TestType,vector<TestType>,cmp<TestType> > Q;/* 使用基本类型,默认降序排列*/priority_queue < string > sQ;//priority_queue< TestType,vector<TestType>,cmp > Q;TestType tmp;while(cin>>tmp.cnt && cin>>tmp.num ){Q.push(tmp);sQ.push(tmp.num);//插入到sQ中}tmp = Q.top();cout << "TestType priority_queue" <<endl;cout <<tmp.cnt <<" " << tmp.num <<endl;while(!Q.empty()){cout << Q.top().cnt << " " << Q.top().num <<endl;Q.pop();}cout << "string priority_queue" <<endl;while(!sQ.empty()){cout << sQ.top() <<endl;sQ.pop();}return 0;}
需要注意的地方不多,优先队列中的元素需要支持"<"操作符,并默认为队列中的元素按降序排列,也就说如果优先队列按照自己重新定义的类型比较的话,需要重载” < “操作符,上面的cmp是我重载的函数操作符。

原创粉丝点击