结构体排序的三种方式
目录
- 方式1 lambda表达式
- 方式2 重载小于号
- 方式3 实现cmp()函数
方式1 lambda表达式
使用lambda表达式来完成sort()
函数的第3个参数,十分优雅,强烈推荐。
语法为
[](Student a, Student b){return a.ChineseGrade >= b.ChineseGrade;}
完整程序如下,
#include <iostream>
#include <algorithm>using namespace std;struct Student
{string name;int MathGrade;int ChineseGrade;
};int main()
{Student students[5];students[0] = {"赵", 10, 20};students[1] = {"钱", 20, 40};students[2] = {"孙", 50, 30};students[3] = {"李", 40, 10};students[4] = {"王", 30, 50};//语文成绩大的学生排在前面,结构体中的变量ChineseGradesort(students, students+5, [](Student a, Student b){return a.ChineseGrade >= b.ChineseGrade;});for(int i = 0; i < 5; i++)cout << "name = " << students[i].name << ", mathgrade = " << students[i].MathGrade << ", chinesegrade = " << students[i].ChineseGrade << endl;return 0;
}
程序输出为,
name = 王, mathgrade = 30, chinesegrade = 50
name = 钱, mathgrade = 20, chinesegrade = 40
name = 孙, mathgrade = 50, chinesegrade = 30
name = 赵, mathgrade = 10, chinesegrade = 20
name = 李, mathgrade = 40, chinesegrade = 10
方式2 重载小于号
在结构体内部重载小于号bool operator < (const Student& tmp) const
,
#include <iostream>
#include <algorithm>using namespace std;struct Student
{string name;int MathGrade;int ChineseGrade;//重载小于号,语文成绩大的学生排在前面,结构体中的变量ChineseGrade bool operator< (const Student& tmp) const{return ChineseGrade > tmp.ChineseGrade;}
};int main()
{Student students[5];students[0] = {"赵", 10, 20};students[1] = {"钱", 20, 40};students[2] = {"孙", 50, 30};students[3] = {"李", 40, 10};students[4] = {"王", 30, 50};sort(students, students+5);for(int i = 0; i < 5; i++)cout << "name = " << students[i].name << ", mathgrade = " << students[i].MathGrade << ", chinesegrade = " << students[i].ChineseGrade << endl;return 0;
}
输出为,
name = 王, mathgrade = 30, chinesegrade = 50
name = 钱, mathgrade = 20, chinesegrade = 40
name = 孙, mathgrade = 50, chinesegrade = 30
name = 赵, mathgrade = 10, chinesegrade = 20
name = 李, mathgrade = 40, chinesegrade = 10
方式3 实现cmp()函数
在结构体外写bool cmp(Student a, Student b)
函数,
#include <iostream>
#include <algorithm>using namespace std;struct Student
{string name;int MathGrade;int ChineseGrade;
};bool cmp(Student a, Student b)
{return a.ChineseGrade > b.ChineseGrade;
}int main()
{Student students[5];students[0] = {"赵", 10, 20};students[1] = {"钱", 20, 40};students[2] = {"孙", 50, 30};students[3] = {"李", 40, 10};students[4] = {"王", 30, 50};//语文成绩大的学生排在前面,结构体中的变量ChineseGradesort(students, students+5, cmp);for(int i = 0; i < 5; i++)cout << "name = " << students[i].name << ", mathgrade = " << students[i].MathGrade << ", chinesegrade = " << students[i].ChineseGrade << endl;return 0;
}
输出为,
name = 王, mathgrade = 30, chinesegrade = 50
name = 钱, mathgrade = 20, chinesegrade = 40
name = 孙, mathgrade = 50, chinesegrade = 30
name = 赵, mathgrade = 10, chinesegrade = 20
name = 李, mathgrade = 40, chinesegrade = 10
结构体排序的三种方式相关推荐
- 定义结构体变量的三种方式
#include <stdio.h>//定义结构体的三种方式,推荐使用第三种//第一种 struct student1 {int age;char name[20];float score ...
- 嵌套结构体初始化的几种方式
嵌套结构体初始化的几种方式 #结构体定义 structA define typedef struct {char a;int b;float c; }struct_A_s; structB defin ...
- 结构体初始化的几种方式
结构体初始化的几种方式 无构造方法的结构体初始化 创建一个结构体 struct STUDENT {string name;int age;string sex; } 定义时赋值 // 定义时赋值,通过 ...
- 创建一对多表结构实例 /操作的三种方式
例 1.注册App01 完成各项配置 2. 写完后自动生成一个id自增列(主键) 如果不想生成 自己写 创建两张表 3.执行创建语句 (其中还进行了一个小修改) 4.按照之前的方法 打开数据库 并输 ...
- 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )
文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...
- Go结构体初始化的几种方式
new初始化结构体指针 可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址. 格式如下: package mainimport "fmt"type stu struc ...
- 11【C语言 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等
Contents 一.Review 二.New Problem:Personal income tax issues(个人所得税问题) 2.1 Description of the problem 2 ...
- go 结构体排序的几种方法
简言 1. 方法1:重载三个函数,Len(), Swap(), Less(),其中Less()函数中写比较函数 2. 方法2:sort.Slice(), 传入一个匿名的比较函数 实验如下图 代码如下 ...
- C++结构体多级排序的三种方法
C++结构体多级排序的三种方法 struct node{int chinese,math;char name[15]; }; 需求:按数学成绩从大到小排序 1.自定义比较器 //自定义比较函数 bo ...
最新文章
- 使用Android Studio搭建Android集成开发环境
- 【错误记录】Google Play 上架报错 ( 您还没有为此轨道选择任何国家或地区。至少要添加 1 个国家或地区才能发布此版本)
- java语言描述一个行为_设计模式之责任链模式——Java语言描述
- word中链接到目标后返回快捷键
- 简单的使用Seajs
- STATIC_URL/STATIC_ROOT/STATICFILES_DIRS/urls.py中的static区别
- Android开发常用的插件及工具
- 两个月新增 80万行代码,Linux 内核维护为什么不会崩?
- 连锁餐饮品牌发展战略的节奏要把握好
- python 下载图片到内存卡_python-23:将图片下载到本地
- [Common 17-39] ‘connect_bd_intf_net‘ failed due to earlier errors. 的解决办法
- 80后开网店卖故事:1500多位为感觉而埋单
- spring中MessageSource的配置使用方法2--ReloadableResourceBundleMessageSource
- zencart 对首页静态化处理
- 内存非延续分派治理方法
- 高中数学建模优秀论文_数学建模优秀论文范文
- 关于将图片转成base64的方法
- C语言学习--------修改控制台输出文字颜色
- html语言开关控制灯泡,用js控制电灯开关
- python制作音乐播放器_python实现音乐播放器 python实现花框音乐盒子
热门文章
- Eclipse is running under 1.8, butthis Java project has a 10 Java compliance level, so WindowBuilder
- canvas画图被放大且模糊
- 6岁男童乞讨养残疾父亲 遭商家空头支票(图)
- 线程安全——Atomic系列类(主要实现原子类)
- 网易|前端开发实习生 | 杭州 | 2021 一面面经
- JavaXYQ 1.4 M1 - 完整的RPG游戏
- windows 下 IOCP模型(完成端口)
- 机器学习(一):Python一元线性回归模型
- 用Python的turtle和matplotlib画出圆满和爱心
- input自动获取焦点弹出键盘