关于重载和比较函数
来源:互联网 发布:淘宝坑产是什么意思 编辑:程序博客网 时间:2024/06/06 04:48
以下内容都是个人见解,若有错误,还望指正!!
最近刚学习了C++中有关重载运算负中的知识,总算明白了如何通过重载一些运算符来改变一些容器的排序顺序 如 priority_queue优先队列的优先顺序和 sort 函数的二级排序,在不写比较函数的情况下如何通过重载运算负实现(如果对一个类有多个操作,sort建议还是用比较函数比较好)
//一般比较函数的写法 struct Node{int a;int b;};bool compare(const Node x,const Node y){//按 a 的升序排列,如果a相等按 b 的升序; if(x.a == b.a) return x.b < y.b;return x.a < y.a; }sort(arr,arr+n,compare);
这里我们对 < 符合做了重载,因为在一般的排序比较函数中默认的都是使用 < 符合来排序和比较的
//重载的两种写法 struct Node{int a;int b;friend bool operator< (const Node& x,const Node& y)//友元函数的写法,这里的变量有2个,和比较函数比较相似好理解 {if(y.a == x.a)return x.b < y.b;return x.a > y.a;}};struct Node{int a;int b;bool operator< (const Node& y)const//这里就应用到一些运算符重载的知识,不是一两句话能说清楚的,不懂的自行学习// 这里说说两个const,第一个是为了保护我们传的引用不被非法修改(传引用为了节约开销,一般的类可能比较复杂)//第二个const 是为了修饰 this 指针(C++中一个很有特点的指针,不懂的需要先学习一下),作用与前面的基本一样 {if(a == y.a)return b < y.b;return a > y.a;}};struct Node{int a;int b;bool operator< (const Node& y)const//如果不明白上面说的第二个const,那么这是一种this指针的写法,道理和上面的一样 {if(this->a == y.a)return this->b < y.b;return this->a > y.a;}};
下面来说一下priority_queue的重载吧,其实在我转载的一篇关于优先队列的使用一文中写的很详细
但是当时并不了解,只是比划着用的,现在终于领悟了
值得注意的就是priority_queue默认的是大根堆,对 < 的重载是与我们所期盼的效果相反的(表达能力有限,懂得人应该理解)
struct node { int priority; int value; friend bool operator< (node n1, node n2) { return n1.priority < n2.priority; //"<"为从大到小排列,">"为从小到大排列 } }; //或者用 this 方式的重载,(这里传参和传引用道理同上,const什么的也是根据C++标准来做的) struct node { int priority; int value; bool operator< (node n2) { return this->priority < n2.priority; //"<"为从大到小排列,">"为从小到大排列 } };
0 0
- 关于重载和比较函数
- 关于重载和重写(覆盖)的比较
- C# 关于方法的隐藏和重载的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 关于拷贝构造函数和重载赋值函数
- STL set重载比较函数
- 重载比较函数 的用法
- 关于重载函数
- 关于函数重载
- 关于C++函数重载
- 关于赋值重载函数
- 关于函数重载
- 关于函数重载
- 关于函数重载(overload)
- 软工文档总结篇(一)
- 第2.1.9章 WEB系统最佳实践Spring文件配置之spring-dubbo.xml
- c#中字符串操作函数
- 判断完全二叉树
- 块级元素与内联元素
- 关于重载和比较函数
- 关于C语言内存移动函数的写法详解
- Java环境变量的配置
- 基本session与cookie代码中写入,以及url路径防非法登录
- 安卓精选面试题
- javascript入门基础篇重点 第五节
- android studio 找不到 javax.*包
- java动态代理
- 友盟分享(QQ,空间,微信,朋友圈,微博)遇到的问题