结构体排序的三种方式
目录
- 方式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 ...
最新文章
- 如何写sybase sql脚本文件_写一个删除lock文件的skill脚本
- PHP在使用正则表达式验证,防注入的时候要注意一下的细节
- LIBSVM -- A Library for Support Vector Machines--转
- 敏捷宣言和企业Scrum作者Mike Beedle去世
- 计算机关闭开启启动程序,如何设置开机启动项?电脑开机启动项怎么增加与关闭?...
- h5精准定位_HTML5 地理定位
- 斯坦福大学机器学习第五课正则化“
- 早期计算机的应用主要是( ) (2分),计算机基础第1次作业(含答案)
- 从事python需要掌握哪些知识和技能_零基础想转行从事Python?需要掌握如下技能...
- 华为机试HJ8:合并表记录
- python 将0矩阵转换为none列表_在学习线性代数时所探索的Python运用
- 最优化算法 之 遗传算法代码实现及说明
- 数据库实验——T-SQL编程
- Spark 学习: spark 原理简述与 shuffle 过程介绍
- 2022新版UI聚合支付系统四方系统源码+修复漏洞完美版
- 苹果home键失灵_苹果手机屏幕失灵售后教你怎么处理
- 新酒饮赛道混战升级,果立方和RIO、贝瑞甜心有什么不同?
- vue 源码自问自答-响应式原理
- C++引用计数原理和实现
- 图形测试分析毫无头绪?HarmonyOS图形栈测试技术帮你解决