C++类对象排序operator重载操作
- 类内默认含有
this
指针,bool operator==(const T& a)
- 类外则需要写两个参数,
bool operator==(const T& a, const T& b)
class People
{public:string name;int id;People(string n, int i):name(n),id(i){}bool operator==(const People& a){return id == a.id && name==a.name;}bool operator<( const People& a){if(id == a.id)return name < a.name;return id < a.id;}
} ;bool operator==(const People& a, const People& b)
{return a.id == b.id && a.name==b.name;
}bool operator<(const People &a, const People& b)
{if(a.id == b.id)return a.name < b.name;return a.id < b.id;
}int main()
{vector<People> vec;vec.push_back(People("Michael",23));vec.push_back(People("James",23));vec.push_back(People("Kobe",24));vec.push_back(People("James",23));cout << "-----按id, then name排序----" << endl;sort(vec.begin(), vec.end()); // 调用operator<for(auto& v : vec)cout << v.id << " " << v.name << endl;cout << "------去重------------------" << endl;vec.erase(unique(vec.begin(), vec.end()),vec.end());// unique删除相邻的一样的,要先排序,unique调用 operator==for(auto& v : vec)cout << v.id << " " << v.name << endl;cout << "-----按名称排序-------------" << endl;sort(vec.begin(), vec.end(),[](People& a, People& b){return a.name < b.name;});for(auto& v : vec)cout << v.id << " " << v.name << endl;return 0;
}
运行结果:
-----按id, then name排序----
23 James
23 James
23 Michael
24 Kobe
------去重------------------
23 James
23 Michael
24 Kobe
-----按名称排序-------------
23 James
24 Kobe
23 Michael
C++类对象排序operator重载操作相关推荐
- LKDHelper使用LKDBHelper以实体类对象进行数据库的操作,例如新建一个新闻实体类,以这个类来
LKDBHelper以实体类对象进行数据库的操作,例如新建一个新闻实体类, 很早的时候用过,是基于FMDB基础上封装的,现在记录下使用过程,年纪大了容易健忘 哈哈 #import "Base ...
- python类对象和实例对象
类对象支持两种操作:属性引用和实例化. 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name. 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称. 因此,如果类定 ...
- python类的定义和创建_Python类对象的创建和使用
通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象. 创建类对象的过程,又称为类的实例化. 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或 ...
- vba 定义类_神通广大的类,瞬间实例多个类对象
你已选中了添加链接的内容蓝字关注,加微信NZ9668获资料信息 VBA解决方案 系列丛书作者 头条百家平台 VBA资深创作者 _______________________________ 大 ...
- C++学习笔记 - 阶段三:C++核心编程 - Chapter7:类和对象-C++运算符重载
阶段三:C++核心编程 Chapter7:类和对象-C++运算符重载 运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型 7.1 加号运算符重载 作用:实现两个自定义数 ...
- 【C++基础编程(二)】类和对象(重点)、文件操作
4 类(class)和对象(object) C++面向对象的三大特性:封装.继承.多态 C++认为万事万物皆对象,对象上有其属性和行为 对于一些具有相同性质的对象,我们可以抽象称他们为类 4.1 封装 ...
- C++ 学习 ::【基础篇:17】:C++ 类与对象:运算符重载介绍、运算符重载函数(类内与类外区别)写法及简单设计实现
本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...
- 实验二——函数重载,快速排序,类对象
函数重载: #include<iostream> using namespace std; struct complex{ double real; double imaginary; } ...
最新文章
- Microsoft Dynamics Marketplace
- 干掉Navicat:正版,MySQL官方客户端真香!
- Linux内核模块编程系列1-极简内核模块编写
- C#中的参数传递(转)
- VSCode + Latex 配置
- Valid Sudoku
- PAT乙级-1070. 结绳(25)
- Asp.net上传文件限制,在大于5M的时候出现DNS解析错误,解决方法。
- 【HDU - 5094】 Maze (状态压缩+bfs)
- 类型的方法,以及关于Stringbuffer和String builder的相关补充
- Program Variant Scheduling job
- 如何解决chm类型的文件在Windows操作系统中无法打开
- 大数据Hadoop基本概念介绍
- python 视频保存_通过Python保存央视频某主题的视频地址
- 10本深入学习Spring框架的最佳书籍和课程
- 基于JAVA飞羽羽毛球馆管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- css3动画: 3d照片旋转transfrom
- 13. nginx四层 https代理https 前后端证书配置
- js打印window.print()图片打印
- 【简单的密码生成器】
热门文章
- 【解决问题】OpenCV(3.4.1) Error: Parsing error (xx.yaml(13): Incorrect indentation) in icvYMLParseValue
- java看图_看图吧,Java
- Linux进程全解6——进程的诞生和消亡
- 教你遇事最有水平的处理方法
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
- 开始学习ZendFramework框架了
- 屏蔽非法路由,好好上网!
- 关于Visual C#.NET数据库开发经典案例解析(附光盘两张)(珍藏版)—的读后感...
- 制作jffs2根文件系统
- 苦练IoT应用开发,还能加速变现,这个机会别错过