注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zorksylar

Nothing is impossible , if distributed.

 
 
 

日志

 
 

STL_priority_queue学习笔记  

2011-08-14 21:32:59|  分类: C++ STL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
模板原型:
priority_queue<T,Sequence,Compare>
T:存放容器的元素类型
Sequence:实现优先级队列的底层容器,默认是vector<T>
Compare:用于实现优先级的比较函数,默认是functional中的less<T>

empty()  如果优先队列为空,则返回真
pop()  删除第一个元素
push()  加入一个元素
size()  返回优先队列中拥有的元素的个数
top()  返回优先队列中有最高优先级的元素

使用时必须注意:priority_queue放置元素时,不会判断元素是否重复。(因为在模板的第二个参数时顺序容器,不能保证元素的唯一性)


1.元素的比较规则默认为按元素的值由大到小排序,可以重载“<”操作符来重新定义比较规则。
如果优先队列的元素类型是结构体,可以通过在结构体中重载“<”操作符的方法来修改优先队列的优先性。

example:
#include <queue>
#include <string>
#include <iostream>

using namespace std;

struct Info
{
       string name;
       float score;
       //重载"<",指定排序规则
       bool operator < (const Info &a)const
       {
              //按照score由小到大排列,如果由大到小排列,使用“>”
              return a.score < score;
       }
};

int main()
{
       priority_queue<Infor> pq;
       Info info;
       info.name = "jack";
       info.score = 68.9;
       pq.push(info);

       info.name = "Bomi";
       info.score = 18.8;
       pq.push(info);

       while(!pq.empty())
       {
              cout<<pq.top().name<<" : " <<pq.top().score<<endl;
              pq.pop();
       }
       return 0;
}

运行结果:
Bomi : 18.8
Jack : 68.9

2.如果优先队列的元素不是结构体类型,则可以通过重载“()”操作符的方式来定义优
先级。当然,元素是结构体类型,也可以通过重载“()”操作符的方式来定义优先级,而
不是一定要在结构体内重载“<”操作符才行。

example :
#include <queue>
#include <vector>
#include <iostream>

using namespace std;

//重载“()”操作符
struct myComp
{
       bool operator()(const int &a,const int &b)
       {
              //由小到大排列用 “>” ,由大到小排列用"<"
              //大根堆用 < ,小根堆用 >
              return a > b;
       }
};

int main()
{
       priority_queue<int,vecotr<int>,myComp> pq;

       pq.push(1);
       pq.push(9);
       pq.push(2);
       pq.push(30);
       
       while(!pq.empty())
       {
              cout<<pq.top()<<endl;
              pq.pop();
       }
       cout<<endl;
       return 0;
}


运行结果: 1 2 9 30




  评论这张
 
阅读(130)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018