- 1、本文档共137页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#include iostream #include algorithm #include vector #include functional //包含less、greater等 using namespace std; void Disp(vectorint myv) //输出vector的元素 { vectorint::iterator it; for(it = myv.begin();it!=myv.end();it++) cout *it ; cout endl; } void main() { int a[]={2,1,5,4,3}; int n=sizeof(a)/sizeof(a[0]); vectorint myv(a,a+n); cout 初始myv: ; Disp(myv); //输出:2 1 5 4 3 sort(myv.begin(),myv.end(),lessint()); cout 递增排序: ; Disp(myv); //输出:1 2 3 4 5 sort(myv.begin(),myv.end(),greaterint()); cout 递减排序: ; Disp(myv); //输出:5 4 3 2 1 } 2)自定义数据类型的排序 对于自定义数据类型如结构体数据,同样默认是lessT(即小于关系函数)作为关系函数,但需要重载该函数。另外还可以自己定义关系函数()。在这些重载函数或者关系函数中指定数据的排序顺序(按哪些结构体成员排序,是递增还是递减)。 归纳起来,实现排序时主要有两种方式: 方式1:在声明结构体类型中重载运算符,以实现按指定成员的递增或者递减排序。如sort(myv.begin(),myv.end())调用默认运算符对myv容器的所有元素实现排序。 方式2:自己定义关系函数(),以实现按指定成员的递增或者递减排序。如sort(myv.begin(),myv.end(),Cmp())调用Cmp的()运算符对myv容器的所有元素实现排序。 #include iostream #include algorithm #include vector #include string using namespace std; struct Stud { int no; string name; Stud(int no1,string name1) //构造函数 { no=no1; name=name1; } bool operator(const Stud s) const //方式1:重载运算符 { return s.nono; //用于按no递减排序,将改为则按no递增排序 } }; struct Cmp //方式2:定义关系函数() { bool operator()(const Stud s,const Stud t) const { return ; //用于按name递增排序,将改为则按name递减排序 } }; void Disp(vectorStud myv) //输出vector的元素 { vectorStud::iterator it; for(it = myv.begin();it!=myv.end();it++) cout it-no , it-name \t; cout endl; } void main() { Stud a[]={Stud(2,Mary),Stud(1,John),Stud(5,Smith)}; int n=sizeof(a)/sizeof(a[0]); vectorStud myv(a,a+n); cout 初始myv: ; Disp(myv); //输出:2,Mary 1,John 5,Smith sort(myv.begin(),myv.end()); //默认使用运算符排序 cout 按no递减排序: ; Disp(myv); //输出:5,Smith 2,Mary 1,John sort(myv.begin(),myv.end(),Cmp()); //使用Cmp中的()运算符进行排序 cout 按name递增排序: ; Disp(myv); //输出:1,John 2,Mary 5,Smith } 在有些算法设计中用到堆,堆采用STL的优先队列来实现,优先级的高低由队列中数据元素的关系函数(比较运算符)确定,很多情况下需要
您可能关注的文档
最近下载
- 苏轼定风波课件PPT.ppt
- 医院智慧能源解决方案-.ppt
- 初中英语新外研版七年级上册Unit 5 Fantastic friends课文讲解(2024秋).doc
- 中国居民膳食指南2024版 .pdf VIP
- 大学军事理论课教程第二章国家安全第三节 国际战略形势.pptx
- 儿童幽门螺杆菌感染诊治专家共识.pptx VIP
- 怡安翰威特-泰康在线人力资源管理优化项目建议书_20170816.pdf VIP
- 初中英语新外研版七年级上册Unit 6课文解析(2024秋).doc
- 认真学习和领会《中国章程》-公需课:课后答案(全).docx
- 2024“学宪法、讲宪法”法治知识竞赛第八届全国中小学法治知识竞赛题库及答案.doc
文档评论(0)