目录

  • 方式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

结构体排序的三种方式相关推荐

  1. 定义结构体变量的三种方式

    #include <stdio.h>//定义结构体的三种方式,推荐使用第三种//第一种 struct student1 {int age;char name[20];float score ...

  2. 嵌套结构体初始化的几种方式

    嵌套结构体初始化的几种方式 #结构体定义 structA define typedef struct {char a;int b;float c; }struct_A_s; structB defin ...

  3. 结构体初始化的几种方式

    结构体初始化的几种方式 无构造方法的结构体初始化 创建一个结构体 struct STUDENT {string name;int age;string sex; } 定义时赋值 // 定义时赋值,通过 ...

  4. 创建一对多表结构实例 /操作的三种方式

    例 1.注册App01  完成各项配置 2. 写完后自动生成一个id自增列(主键) 如果不想生成 自己写 创建两张表 3.执行创建语句 (其中还进行了一个小修改) 4.按照之前的方法 打开数据库 并输 ...

  5. 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )

    文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...

  6. Go结构体初始化的几种方式

    new初始化结构体指针 可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址. 格式如下: package mainimport "fmt"type stu struc ...

  7. 11【C语言 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等

    Contents 一.Review 二.New Problem:Personal income tax issues(个人所得税问题) 2.1 Description of the problem 2 ...

  8. go 结构体排序的几种方法

    简言 1. 方法1:重载三个函数,Len(), Swap(), Less(),其中Less()函数中写比较函数 2. 方法2:sort.Slice(), 传入一个匿名的比较函数 实验如下图 代码如下 ...

  9. C++结构体多级排序的三种方法

    C++结构体多级排序的三种方法 struct node{int chinese,math;char name[15]; }; 需求:按数学成绩从大到小排序  1.自定义比较器 //自定义比较函数 bo ...

最新文章

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

热门文章

  1. C#WPF 项目开发(一)(火车订票系统)
  2. 【JDBC技术】终于知道Java底层是如何连接数据库了!——(5)批量插入数据
  3. Android 抛弃IMEI改用ANDROID_ID
  4. Golang框架 GoFrame
  5. 基于Golang语言GoFrame框架通用后台权限管理系统
  6. 前后端联调,比Postman更好用的国产接口调试工具:Apipost
  7. 『SQLServer系列教程』——事务详解
  8. 国外虚拟服务器,国外虚拟主机
  9. 初探Java Nashorn脚本引擎
  10. java写一个随机球赛