class elem
{
public:elem();elem(int aa):a(aa){}
public:int a;int getA(){return a;}
};class elem1
{
public:elem1();elem1(int aa):a(aa){}
public:int a;int getA(){return a;}friend bool operator < (const elem1 &e1,const elem1 &e2)//只能重载<{return e1.a <e2.a;//大顶堆是<;小顶堆是>}
};class Scorer
{
public:bool operator ()(const elem &e1,const elem &e2){return e1.a<e2.a;}
};
bool Cmp(const elem &e1,const elem &e2)
{return e1.a <e2.a;
}
int main()
{vector<elem> ve;ve.push_back(elem(5));ve.push_back(elem(6));ve.push_back(elem(7));ve.push_back(elem(1));ve.push_back(elem(0));ve.push_back(elem(19));ve.push_back(elem(60));ve.push_back(elem(61));ve.push_back(elem(2));ve.push_back(elem(68));ve.push_back(elem(9));list<elem> le;le.push_back(elem(5));le.push_back(elem(6));le.push_back(elem(7));le.push_back(elem(1));le.push_back(elem(0));le.push_back(elem(19));le.push_back(elem(6));priority_queue<int,vector<int>,less<int> > pq;//大顶堆//优先队列如果用仿函数的形式,必须有三个参数pq.push(5);pq.push(6);pq.push(1);pq.push(2);pq.push(9);/*while (!pq.empty()){int t = pq.top();cout<<t<<" ";pq.pop();}*/priority_queue<elem,vector<elem>,Scorer > q;//1.自定义仿函数,也要有三个参数q.push(5);q.push(6);q.push(1);q.push(2);q.push(9);priority_queue<elem1> q1;//2.q1.push(5);q1.push(6);q1.push(1);q1.push(2);q1.push(9);set<int,less<int> > s;//从小到大s.insert(5);s.insert(6);s.insert(1);s.insert(3);s.insert(0);set<elem,Scorer> s1;s1.insert(5);s1.insert(6);s1.insert(1);s1.insert(3);s1.insert(0);set<elem,Scorer >::iterator it;for (it = s1.begin();it!=s1.end();++it){cout<<it->getA()<<" ";}/*while(!q1.empty()){elem1 e = q1.top();cout<<e.getA()<<" ";q1.pop();}*/int array[] = {5,6,7,1,0,19,6};sort(array,array+7,greater<int>());//less<int>() 从小到大//说明greater,less和Scorer一样都是类,而Cmp是函数;所以vector还是用Cmp形式的函数比较方便/*for (int i=0;i<7;++i){cout<<array[i]<<" ";}cout<<endl;*///sort(ve.begin(),ve.end(),Scorer());//sort(ve.begin(),ve.end(),Cmp);//partial_sort(ve.begin(),ve.begin()+3,ve.end(),Cmp);//对前三个排序nth_element(ve.begin(),ve.begin()+3,ve.end(),Cmp);//保证前三个最小,前三个不排序//sort(le.begin(),le.end(),Cmp);le.sort(Scorer());//Cmp//list的排序是要移动其内部指针的,所以只能用其内部的sort,而不能用通用的sort//也不能用nth_elements之类的排序/*vector<elem>::iterator it;for (it = ve.begin();it!=ve.end();++it){cout<<it->getA()<<" ";}*/cout<<endl;}

stl中各种容器的自定义比较函数的方法,vector,list,set相类似,要定义一个比较类,类里面有比较成员函数 bool operator ()(const,const),并且return a<b 是从小到大排序

priority_queue有些不同,主要表现在return a<b是大顶堆

所有的共同之处是,都可以通过定义一个比较类实现排序

stl中各种容器的自定义比较函数相关推荐

  1. STL中基本容器有: string、vector、list、deque、set、map

    为什么80%的码农都做不了架构师?>>>    在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...

  2. 算法求解中的变量、数组与数据结构(STL 中的容器)

    本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...

  3. STL 中的容器们 (二)

    STL 中的容器们 容器最后一个元素的迭代器 我们知道容器: .begin():第一个元素coll[0]的迭代器 .end():最后一个元素之前的元素的迭代器 所以容器最后一个元素的迭代器为:coll ...

  4. STL 中的容器们(四)

    STL 中的容器们 for (int i = 0; i < coll.size()-1; ++i){... } 上述代码的写法,coll.size()-1 语句是会出问题的,STL 的所有容器的 ...

  5. C++ STL : 模拟实现STL中的容器适配器stack和queue

    目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...

  6. php的set 容器,关于STL中set容器的一些总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  7. 关于STL中vector容器的一些总结

    第一个总结来自于http://www.jb51.net/article/41648.htm,第二个来自于http://www.cppblog.com/totti1006/archive/2009/09 ...

  8. C++ STL : 模拟实现STL中的容器适配器priority_queue

    目录 priority_queue 文档介绍 实现思路 思路 仿函数 实现 priority_queue 文档介绍 文档介绍 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含 ...

  9. C/C++语言函数学习(3)STL中map容器

    /******************************************************************map的基本操作函数:C++ Maps是一种关联式容器,包含&qu ...

最新文章

  1. 谷歌出品EfficientNet:比现有卷积网络小84倍,比GPipe快6.1倍
  2. protobuf简单序列化反序列化示例
  3. Python BaseHTTPServer 模块解析
  4. how is RFC to backend determined - maintenance view IWFNDV_MGDEAM
  5. Java钱包_钱包行云java
  6. Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析
  7. householder变换qr分解matlab_【基础教程】Matlab实现傅里叶变换
  8. 缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttribute..ctor” 解决方案...
  9. 读大师的书 说自己的话——《传世经典书丛评注版》邀你来点评
  10. Java:单例模式的七种写法 (转)
  11. Web安全实践(12)密码探测
  12. 数据库、连接-mysql学习笔记二-by小雨
  13. latex---插入三线表伪代码流程图
  14. UML应用的三重境界
  15. win7 uefi 无法对计算机,U盘UEFI模式无法启动WIN7安装解决教程
  16. diskgenius克隆硬盘无法启动_用Diskgenius克隆分区到另一个磁盘上
  17. HDU4699:Editor
  18. Homebrew进阶使用教程(二)-用一个命令行天气客户端构建自己的仓库
  19. linux /dev/dsp: 没有那个文件或目录 解决方法
  20. 44个路由器知识要点

热门文章

  1. SVM支持向量机(上)
  2. 机器学习怎么入门?一份速成指南拿好!
  3. 指哪分哪:交互式分割近期发展
  4. 智能写作全景介绍:从最新前沿技术到行业落地解析
  5. PW Live直播 | 清华大学​高天宇:对比学习及其在NLP中的应用
  6. Java中栈和队列的用法 Stack And Queue
  7. java logging包_用JDK中提供的java.util.logging.*包创建Logger对象----原创
  8. waitpid最后以一个参数设为0_西门子MM440变频器参数设置
  9. mysql 设置某个字段等于某个字段_学习记录-第十八天(李玉婷MySQL基础 第12天)...
  10. C#——自定义泛型链表DEMO