C++中自定义比较函数和重载运算符总结
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++中自定义比较函数和重载运算符总结相关推荐
- python自定义函数的关键字_Python3.x中自定义比较函数
在Python3.x的世界里,cmp函数没有了.那么sorted,min,max等需要比较函数作为参数的函数该如何用呢? 以min函数的定义为例,有两种重载形式: 单参数(一个迭代器): 复制代码 代 ...
- map中自定义比较函数
转载自:http://blog.csdn.net/smallacmer/article/details/7478891 首先对于map如果采用默认的比较函数,是按键值由小到大插入元素的.. set和m ...
- OpenCV中Mat类的重载运算符operator()的用法
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 定义如下: inline Mat Mat::op ...
- c语言中箭头的作用,为什么C中的箭头(-)运算符存在?
我将您的问题解释为两个问题:1)为什么->甚至存在,以及2)为什么.不自动取消引用指针.这两个问题的答案都有历史渊源. 为什么会->存在? 在C语言的第一个版本(1975年5月第6版Uni ...
- stl中各种容器的自定义比较函数
class elem { public:elem();elem(int aa):a(aa){} public:int a;int getA(){return a;} };class elem1 { p ...
- 中双目运算符_C++日志(四十)教你如何以非成员函数的形式重载运算符
上一篇日志中讲述了如何通过类的非静态函数成员,进行运算符重载: 机器学习入坑者:C++日志(三十九)教你如何以类的非静态成员函数形式重载运算符zhuanlan.zhihu.com 在C++中,同样可 ...
- 【C++】重载运算符(一)
1.1 重载运算符特点 重载运算符本质上是一次函数调用 除了operator() 运算符调用外,其他重载运算符不能含有默认参数. 当重载的运算符是成员函数时,this绑定到左侧运算对象.成员运算符函数 ...
- C++中operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...
- 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...
最新文章
- 关于python中程序流程结构-Python语言程序设计(第4章:程序结构设计)
- endpointimpl怎么填参数_App拉新:以老拉新活动怎么做?
- unity android 符号表,如何获取libunity.so的符号表
- 无论商业模式怎么变,其最核心的东西,永远不变
- Mac(不限于)中几个有内涵的工具
- Bug(二)——error LNK1104:无法打开“opengl32.lib”
- PHP学习之十二:自定义函数
- py-R-FCN安装记录
- 选择html5抛弃flash,谷歌Chrome年底正式抛弃Flash 全面转向HTML5
- 在校大学生研究生软著申请详解及模板下载
- 解决谷歌浏览器Chrome不能上网,其他浏览器可以正常上网问题
- adb连接木木模拟器
- 【bzoj4972】小Q的方格纸 前缀和
- 有一张厚度为0.1mm的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可达(再对折一次就超过)珠穆朗玛峰的高度?(C语言)
- http与htpps的区别
- 改善编程体验: IdeaVimExtension介绍
- python 列表删除元素
- python修改app定位_appnium定位+操作方式(python)
- linux美国GE公司扫描机器,美国GE 反射内存卡
- 使用sale数据库,统计全部商品的平均价格,以及文具类商品的平均价格
热门文章
- python怎么学好-怎么短时间学好python
- python课程费用-Python在线培训课程费用是多少?值不值得报名?
- python网课一般多少钱-Python培训网课一般学费多少?毕业生能承担吗?
- 财务人员学python有用吗-python在财务里面有用吗
- python3爬虫实例-python3 网络爬虫 实例1
- 在哪里能收到python实例代码-Python找出最小的K个数实例代码
- 适合python的笔记本配置-jupyter之配置自己喜欢的python环境
- python编程入门书-读书笔记之《编程小白的第1本Python入门书》
- 解决Jetson nano上编译librealsense错误:Could NOT find Vulkan (missing: VULKAN_LIBRARY VULKAN_INCLUDE_DIR)
- java set集合转数组_Java数组【array】与集合【list】的相互转换