45954-00郭炜-新标准C程序设计10 标准模板库2_第1页
45954-00郭炜-新标准C程序设计10 标准模板库2_第2页
45954-00郭炜-新标准C程序设计10 标准模板库2_第3页
45954-00郭炜-新标准C程序设计10 标准模板库2_第4页
45954-00郭炜-新标准C程序设计10 标准模板库2_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计实习,郭炜微博,信息科学技术学院,1,标准模板库STL(二),信息科学技术学院程序设计实习郭炜,2,信息科学技术学院程序设计实习郭炜,set和multiset,瑞士少女峰,关联容器set,multiset,map,multimap内部元素有序排列,新元素插入的位置取决于它的值,查找速度快。除了各容器都有的函数外,还支持以下成员函数:find:查找等于某个值的元素(x小于y和y小于x同时不成立即为相等)lower_bound:查找某个下界upper_bound:查找某个上界equal_range:同时查找上界和下界count:计算等于某个值的元素个数(x小于y和y小于x同时不成立即为相等)insert:用以插入一个元素或一个区间,预备知识:pair模板templatestructpairtypedef_T1first_type;typedef_T2second_type;_T1first;_T2second;pair():first(),second()pair(const_T1,map/multimap容器里放着的都是pair模版类的对象,且按first从小到大排序第三个构造函数用法示例:pairp(pair(5.5,4.6);/p.first=5,p.second=4,multisettemplate,classA=allocatorclassmultiset;Pred类型的变量决定了multiset中的元素,“一个比另一个小”是怎么定义的。multiset运行过程中,比较两个元素x,y的大小的做法,就是生成一个Pred类型的变量,假定为op,若表达式op(x,y)返回值为true,则x比y小。Pred的缺省类型是less。,multisettemplate,classA=allocatorclassmultiset;Pred类型的变量决定了multiset中的元素,“一个比另一个小”是怎么定义的。multiset运行过程中,比较两个元素x,y的大小的做法,就是生成一个Pred类型的变量,假定为op,若表达式op(x,y)返回值为true,则x比y小。Pred的缺省类型是less。less模板的定义:templatestructless:publicbinary_functionbooloperator()(constT/less模板是靠a;插入元素时,multiset会将被插入元素和已有元素进行比较。由于less模板是用进行比较的,所以,这都要求A的对象能用比较,即适当重载了,multiset的用法示例,#include#include/使用multiset须包含此文件usingnamespacestd;templatevoidPrint(Tfirst,Tlast)for(;first!=last;+first)cout*first;coutendl;classAprivate:intn;public:A(intn_)n=n_;friendbooloperator(constA,structMyLessbooloperator()(constA/输出2)481922223340,/m1元素:481922223340MSET1:iteratorpp=m1.find(19);if(pp!=m1.end()/条件为真说明找到coutfoundendl;/本行会被执行,输出foundcout3);cout*m1.lower_bound(22),*m1.upper_bound(22)endl;/输出3)22,33pp=m1.erase(m1.lower_bound(22),m1.upper_bound(22);/pp指向被删元素的下一个元素cout4);Print(m1.begin(),m1.end();/输出4)48193340cout5);cout*ppendl;/输出5)33MSET2m2;/m2里的元素按n的个位数从小到大排m2.insert(a,a+SIZE);cout6);Print(m2.begin(),m2.end();/输出6)4022334819return0;,/m1元素:481922223340MSET1:iteratorpp=m1.find(19);if(pp!=m1.end()/条件为真说明找到coutfoundendl;/本行会被执行,输出foundcout3);cout*m1.lower_bound(22),*m1.upper_bound(22)endl;/输出3)22,33pp=m1.erase(m1.lower_bound(22),m1.upper_bound(22);/pp指向被删元素的下一个元素cout4);Print(m1.begin(),m1.end();/输出4)48193340cout5);cout*ppendl;/输出5)33MSET2m2;/m2里的元素按n的个位数从小到大排m2.insert(a,a+SIZE);coutclassset插入set中已有的元素时,忽略插入。,#include#includeusingnamespacestd;intmain()typedefset:iteratorIT;inta5=3,4,6,1,2;setst(a,a+5);/st里是12346pairresult;result=st.insert(5);/st变成123456if(result.second)/插入成功则输出被插入元素coutbounds=st.equal_range(4);cout*bounds.first,mmid;mmidpairs;coutvalue_type;pairs.insert(mmid:value_type(15,99.3);cout“2)”pairs.count(15)endl;/求关键字等于某值的元素个数pairs.insert(mmid:value_type(30,111.11);pairs.insert(mmid:value_type(10,22.22);,输出:1)02)2,multimap示例,pairs.insert(mmid:value_type(25,33.333);pairs.insert(mmid:value_type(20,9.3);for(mmid:const_iteratori=pairs.begin();i!=pairs.end();i+)coutfirstsecond)cmd)if(cmd=Add).idst.score;mp.insert(MAP_STD:value_type(st.score,);elseif(cmd=Query)intscore;cinscore;MAP_STD:iteratorp=mp.lower_bound(score);if(p!=mp.begin()-p;score=p-first;/比要查询分数低的最高分MAP_STD:iteratormaxp=p;intmaxId=p-second.id;,intmain()MAP_STDmp;CStudentst;stringcmd;while(cincmd)if(cmd=Add).idst.score;mp.insert(MAP_STD:value_type(st.score,);elseif(cmd=Query)intscore;cinscore;MAP_STD:iteratorp=mp.lower_bound(score);if(p!=mp.begin()-p;score=p-first;/比要查询分数低的最高分MAP_STD:iteratormaxp=p;intmaxId=p-second.id;,iteratorlower_bound(constT查找一个最大的位置it,使得begin(),it)中所有元素的first都比val小。,for(;p!=mp.begin(),second.idfirstendl;else/lower_bound的结果就是begin,说明没人分数比查询分数低coutNobodyendl;return0;,second.idfirstendl;else/lower_bound的结果就是begin,说明没人分数比查询分数低coutNobodyclassmap.typedefpairvalue_type;.;map中的元素都是pair模板类对象。关键字(first成员变量)各不相同。元素按照关键字从小到大排列,缺省情况下用less,即“mmid;mmidpairs;cout1)pairs.count(15)endl;pairs.insert(mmid:value_type(15,2.7);pairs.insert(make_pair(15,99.3);/make_pair生成一个pair对象cout2)pairs.count(15)endl;pairs.insert(mmid:value_type(20,9.3);mmid:iteratori;cout3);for(i=pairs.begin();i!=pairs.end();i+)cout*i,;coutendl;,输出:1)02)13)(15,2.7),(20,9.3),cout4);intn=pairs40;/如果没有关键字为40的元素,则插入一个for(i=pairs.begin();i!=pairs.end();i+)cout*i,;coutendl;cout5);pairs15=6.28;/把关键字为15的元素值改成6.28for(i=pairs.begin();i!=pairs.end();i+)cout*iclassqueue;同样也有push,pop,top函数。但是push发生在队尾;pop,top发生在队头。先进先出。,priority_queue和queue类似,可以用vector和deque实现。缺省情况下用vector实现。priority_queue通常用堆排序技术实现,保证最大的元素总是在最前面。即执行pop操作时,删除的是最大的元素;执行top操作时,返回的是最大元素的引用。默认的元素比较器是l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论