




全文预览已结束
VIP免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+优先队列的基本使用方法#include#include#includeusing namespace std;struct nodefriend bool operator (node n1, node n2)return n1.priority n2.priority;/为从小打到排列int priority;int value;int main()const int len = 5;int i;int alen = 3,5,9,6,2;/示例1priority_queue qi;/普通的优先级队列,按从大到小排序for(i = 0; i len; i+)qi.push(ai);for(i = 0; i len; i+)coutqi.top() ;qi.pop();coutendl;/示例2priority_queueint, vector, greater qi2;/从小到大的优先级队列,可将greater改为less,即为从大到小for(i = 0; i len; i+)qi2.push(ai);for(i = 0; i len; i+)coutqi2.top() ;qi2.pop();coutendl;/示例3priority_queue qn;/必须要重载运算符node blen;b0.priority = 6; b0.value = 1;b1.priority = 9; b1.value = 5;b2.priority = 2; b2.value = 3;b3.priority = 8; b3.value = 2;b4.priority = 1; b4.value = 4;for(i = 0; i len; i+)qn.push(bi);cout优先级t值endl;for(i = 0; i len; i+)coutqn.top().prioritytqn.top().valueendl;qn.pop();return 0;对于队列里元素为一个结构体类型,按照某一个属性排序,就需要对比较函数进行重载小结一下:1、若是定义值类型对象,如:intmain() priority_queue qn; node n1; n1.a = 9; node n2; n2.a = 2; node n3; n3.a = 50; qn.push(n1); qn.push(n2); qn.push(n3); int size = qn.size(); for ( int i = 0; i size; i+) cout qn.top().a endl; qn.pop(); return 0;则定义优先级的时候,直接在类中写个friend 的操作符重载函数即可:class nodepublic : int a; node() node( int x):a(x)friend bool operator ne2.a) return true ; else return false ; ;其中在cprimer第三版 中文版中关于操作符重载有如下描述:程序员只能为类类型或枚举类型的操作数定义重载操作符我们可以这样来实现把重载操作符声明为类的成员或者声明为名字空间成员同时至少有一个类或枚举类型的参数按值传递或按引用传递因此不可用指针类型的参数;2、如果想定义一个指针类型的优先队列,那就不可这么简单的定义了,你需要自定义一个自己的比较函数,在priority_queue的模板函数中,我们可以利用这样一个templateclass _Ty, class _Container = vector, class _Pr = less 模板,在我们的程序代码中,则需要自己定义一个类来定义第三个模板参数,如:class nodePointerComparerpublic : nodePointerComparer() bool operator ()( const node* ne1, const node* ne2) const return ne1-lessthan(ne2); ;当然在这之前我们的类Node要重新书写class nodepublic : int a; node() node( int x):a(x) bool lessthan( const node* pnode) const return a a; ;这样在main函数中就可以定义指针类型的优先队列了:int main() priority_queue node*, vector , nodePointerComparer qn; node *n1 = new node(90); node *n2 = new node(2); node *n3 = new node(50); qn.push(n1); qn.push(n2); /span qn.push(n3); int size = qn.size(); for ( int i = 0; i size; i+) cout a endl; qn.pop(); return 0;疑问之处:如果你使用第一种值传递的操作符重载,来实现第二种的指针类型优先队列,是不会达到想要的结果的,个人理解是因为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年货物总代理授权协议书
- 2025年炉渣供应协议样本
- 企业并购中的法律注意事项
- 2025年合作发展协议书(数据处理公司)
- 2025年代理权与咨询服务协议书
- 2025年体育场地施工合作协议
- 智能物流与制造业供应链优化
- 深化文化体制机制改革的现状及总体形势
- 理赔业务流程复杂度风险基础知识点归纳
- 理赔业务风险管理跨部门执行风险基础知识点归纳
- DBJ51-T 198-2022 四川省既有民用建筑结构安全隐患排查技术标准
- 智能楼宇管理员(四级)理论考试(重点)题库(含答案)
- 国开期末考试《城市管理学》机考试题及答案(第13套)
- 2分钟双人相声剧本
- 脉冲编码调制与解调实验报告
- 人教版五年级下册数学找次品表格式教案设计
- EAM实施和应用
- 《工程勘察设计收费管理规定》计价格【2002】10号(废止)
- 做大做强阳江刀剪产业的思考.
- 日本玩具标准ST2016-PART3-CHEMICALPROPERTIES-中英对照
- 食堂厨房除油烟系统清洗项目招投标书范本
评论
0/150
提交评论