sort

自定义比较函数

//示例
struct node{int x, y;
};bool cmp(const node& a, const node& b){return a.x > b.x //对x降序排列
}node d[maxn];int main(){sort(d, d + n, cmp);return 0;
}

注:自定义比较函数的形式同样也适用于pair类型数据排序。

重载运算符<

//示例
struct node{int x, y;
};bool operator <(const node& a, const node& b){return a.x > b.x; //重载为降序排列
}node d[maxn];int main(){sort(d, d + n);return 0;
}

注:由于sort默认less(升序),所以重载’<’运算符。重载运算符的操作不能用于pair类型数据的排序,只能作用于结构体或类对象。

priority_queue

重载运算符< (运算符重载函数放到结构体外)

struct node{int x, y;
};bool operator <(const node& a, const node& b){return a.x > b.x //less默认大顶堆,改为小顶堆
}//bool operator >(const node& a, const node& b){//    return a.x < b.x //greater默认小顶堆,改为大顶堆
//}int main(){priority_queue<node, vector<node>, less<node> > que;//priority_queue<node, vector<node>, greater<node> > que;return 0;
}

注:同样重载运算符的操作不能用于pair类型数据的排序,只能作用于结构体或类对象。

重载运算符< (运算符重载函数放到结构体内)

struct node{int x, y;bool operator <(const node& a) const { //必须加constreturn x > a.x;}//bool operator >(const node& a) const { //必须加const//    return x < a.x;//}
};int main(){priority_queue<node, vector<node>, less<node> > que;//priority_queue<node, vector<node>, greater<node> > que;return 0;
}

注:同样重载运算符的操作不能用于pair类型数据的排序,只能作用于结构体或类对象。

自定义比较函数

struct node{int x, y;
};struct cmp1{bool operator()(node a, node b){return a.x > b.x; //小顶堆}
}struct cmp2{bool operator()(node a, node b){return a.x < b.x; //大顶堆}
}int main(){priority_queue<node, vector<node>, cmp1> que1; //小顶堆priority_queue<node, vector<node>, cmp2> que2; //大顶堆return 0;
}

注:同样适用于pair类型数据排序。

其他

set<int, greater<int> > st; //按照从大到小,默认是less<int>
typedef pair <int,int> P;
set<P> st; //按照pair的第一个元素来排,第一个相等的话按第二个来排
set<P, greater<P> > st;//按照从大到小的greater来排

注:set、map的自定义比较函数和重载运算符与优先队列priority_queue类似。

原文链接:https://ain-crad.github.io/2018/08/07/STL-cmp/

C++中自定义比较函数和重载运算符总结相关推荐

  1. python自定义函数的关键字_Python3.x中自定义比较函数

    在Python3.x的世界里,cmp函数没有了.那么sorted,min,max等需要比较函数作为参数的函数该如何用呢? 以min函数的定义为例,有两种重载形式: 单参数(一个迭代器): 复制代码 代 ...

  2. map中自定义比较函数

    转载自:http://blog.csdn.net/smallacmer/article/details/7478891 首先对于map如果采用默认的比较函数,是按键值由小到大插入元素的.. set和m ...

  3. OpenCV中Mat类的重载运算符operator()的用法

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 定义如下: inline Mat Mat::op ...

  4. c语言中箭头的作用,为什么C中的箭头(-)运算符存在?

    我将您的问题解释为两个问题:1)为什么->甚至存在,以及2)为什么.不自动取消引用指针.这两个问题的答案都有历史渊源. 为什么会->存在? 在C语言的第一个版本(1975年5月第6版Uni ...

  5. stl中各种容器的自定义比较函数

    class elem { public:elem();elem(int aa):a(aa){} public:int a;int getA(){return a;} };class elem1 { p ...

  6. 中双目运算符_C++日志(四十)教你如何以非成员函数的形式重载运算符

    上一篇日志中讲述了如何通过类的非静态函数成员,进行运算符重载: 机器学习入坑者:C++日志(三十九)教你如何以类的非静态成员函数形式重载运算符​zhuanlan.zhihu.com 在C++中,同样可 ...

  7. 【C++】重载运算符(一)

    1.1 重载运算符特点 重载运算符本质上是一次函数调用 除了operator() 运算符调用外,其他重载运算符不能含有默认参数. 当重载的运算符是成员函数时,this绑定到左侧运算对象.成员运算符函数 ...

  8. C++中operator关键字(重载操作符)

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...

  9. 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )

    文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...

最新文章

  1. 关于python中程序流程结构-Python语言程序设计(第4章:程序结构设计)
  2. endpointimpl怎么填参数_App拉新:以老拉新活动怎么做?
  3. unity android 符号表,如何获取libunity.so的符号表
  4. 无论商业模式怎么变,其最核心的东西,永远不变
  5. Mac(不限于)中几个有内涵的工具
  6. Bug(二)——error LNK1104:无法打开“opengl32.lib”
  7. PHP学习之十二:自定义函数
  8. py-R-FCN安装记录
  9. 选择html5抛弃flash,谷歌Chrome年底正式抛弃Flash 全面转向HTML5
  10. 在校大学生研究生软著申请详解及模板下载
  11. 解决谷歌浏览器Chrome不能上网,其他浏览器可以正常上网问题
  12. adb连接木木模拟器
  13. 【bzoj4972】小Q的方格纸 前缀和
  14. 有一张厚度为0.1mm的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可达(再对折一次就超过)珠穆朗玛峰的高度?(C语言)
  15. http与htpps的区别
  16. 改善编程体验: IdeaVimExtension介绍
  17. python 列表删除元素
  18. python修改app定位_appnium定位+操作方式(python)
  19. linux美国GE公司扫描机器,美国GE 反射内存卡
  20. 使用sale数据库,统计全部商品的平均价格,以及文具类商品的平均价格

热门文章

  1. python怎么学好-怎么短时间学好python
  2. python课程费用-Python在线培训课程费用是多少?值不值得报名?
  3. python网课一般多少钱-Python培训网课一般学费多少?毕业生能承担吗?
  4. 财务人员学python有用吗-python在财务里面有用吗
  5. python3爬虫实例-python3 网络爬虫 实例1
  6. 在哪里能收到python实例代码-Python找出最小的K个数实例代码
  7. 适合python的笔记本配置-jupyter之配置自己喜欢的python环境
  8. python编程入门书-读书笔记之《编程小白的第1本Python入门书》
  9. 解决Jetson nano上编译librealsense错误:Could NOT find Vulkan (missing: VULKAN_LIBRARY VULKAN_INCLUDE_DIR)
  10. java set集合转数组_Java数组【array】与集合【list】的相互转换