C++结构体排序个人总结(运算符重定义,比较器)
来源:互联网 发布:eclipse java mars汉化 编辑:程序博客网 时间:2024/05/16 06:45
前几天做蓝桥杯题目有一题有用到结构体排序,刚开始使用比较器,然后sort()排序一下就可以,后来参考别人的代码发现还可以用运算符重定义,着实省事很多,省的再在结构体外面写一个比较器的方法,所以现在总结一下:
第一种:结构体内重定义 (‘ < ’符号),然后sort就可以排序
#include"iostream"#include"algorithm"using namespace std;struct Node{int rank;bool operator<(const Node& n)const{//运算符重定义 return rank < n.rank;// rank > n.rank 降序 rank < n.rank 降序}}node[3];int main(){int n = 3;for(int i = 0;i < n;i++)node[i].rank = i;sort(node,node + n);for(int i = 0;i < n;i++)cout << node[i].rank << endl;return 0;}运行结果:升序(降序只需要改成 rank > n.rank)
第二种:比较器(结构体外定义比较器,然后调用sort时把相应的比较器输入)
#include"iostream"#include"algorithm"#include"vector"using namespace std;struct Node{int rank;bool operator<(const Node& n)const{//运算符重定义 return rank < n.rank;// rank > n.rank 降序 rank < n.rank 降序}}node[3];bool cmp(Node a,Node b){//比较器写法1return a.rank > b.rank;//排序规则同上}bool cmp_const(const Node& a,const Node& b){//比较器写法2return a.rank > b.rank;}int main(){int n = 3;for(int i = 0;i < n;i++)node[i].rank = i;sort(node, node + n,cmp_const);for(int i = 0;i < n;i++)cout << node[i].rank << endl;return 0;}运行结果同上
因为主修的不是C++,所以关于写法1,写法2有什么区别还不清楚,等过两天问老师才知道,但是运行结果一样
写法1,2的区别
为了限定隐含的this指针,
即这个成员函数不能修改其数据成员
一般在类中这样用,这个成员函数的功能多数是get数据成员,即获得对象的某个数据,只读不写相关文章连接
应用:vector排序应用
#include"iostream"#include"algorithm"#include"vector"using namespace std;struct Node{int rank;bool operator<(const Node& n)const{//运算符重定义 return rank > n.rank;// rank > n.rank 降序 rank < n.rank 降序}}node[3];bool cmp(Node a,Node b){//比较器写法1return a.rank > b.rank;//排序规则同上}bool cmp_const(const Node& a,const Node& b){//比较器写法2return a.rank > b.rank;}int main(){vector<Node> v;int n = 3;for(int i = 0;i < n;i++)node[i].rank = i;for(int i = 0;i < n;i++)v.push_back(node[i]);sort(v.begin(), v.end());//操作符重定义//sort(v.begin(), v.end(),cmp);//比较器1//sort(v.begin(), v.end(),cmp_const);//比较器2for(int i = 0;i < n;i++)cout << v[i].rank << endl;return 0;}
0 0
- C++结构体排序个人总结(运算符重定义,比较器)
- C语言基础(七)字符串 类型重定义 结构体
- C++重写(override)、重载(overload)、重定义(redefine)以及虚函数调用机制【个人总结】
- 笔记一 运算符重定义
- 【基础练习】结构体定义比较函数双关键字排序
- 排序总结(比较排序)
- 排序算法(个人总结)
- set排序重定义
- C语言结构体定义
- C语言结构体定义
- 【排序结构5】 基于比较的内部排序总结
- 【排序结构5】 基于比较的内部排序总结
- 【C】运算符总结
- 个人重构总结
- c与C++中结构定义的比较
- 定义显式(隐式)运算符 总结
- 利用运算符重载将结构体排序--uva11729
- 结构体如果没有重载比较运算符,不能直接进行比较
- Laravel mysql 添加外键失败
- C++ STL set map 学习
- postgresql给列添加注释信息
- 4.网络层(2)---子网划分
- 利用Android Studio快速导入GitHub上的Android项目
- C++结构体排序个人总结(运算符重定义,比较器)
- 迟到的DAY2任务
- javascript call()
- while 动态创建对象
- Sublime Text 3快捷键
- 欢迎使用CSDN-markdown编辑器
- 登录界面的数据传输流程 AJax
- android-广播、持久化、内容提供器
- 深入理解并实现DES算法