目录

  • 方式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. 使用Android Studio搭建Android集成开发环境
  2. 【错误记录】Google Play 上架报错 ( 您还没有为此轨道选择任何国家或地区。至少要添加 1 个国家或地区才能发布此版本)
  3. java语言描述一个行为_设计模式之责任链模式——Java语言描述
  4. word中链接到目标后返回快捷键
  5. 简单的使用Seajs
  6. STATIC_URL/STATIC_ROOT/STATICFILES_DIRS/urls.py中的static区别
  7. Android开发常用的插件及工具
  8. 两个月新增 80万行代码,Linux 内核维护为什么不会崩?
  9. 连锁餐饮品牌发展战略的节奏要把握好
  10. python 下载图片到内存卡_python-23:将图片下载到本地
  11. [Common 17-39] ‘connect_bd_intf_net‘ failed due to earlier errors. 的解决办法
  12. 80后开网店卖故事:1500多位为感觉而埋单
  13. spring中MessageSource的配置使用方法2--ReloadableResourceBundleMessageSource
  14. zencart 对首页静态化处理
  15. 内存非延续分派治理方法
  16. 高中数学建模优秀论文_数学建模优秀论文范文
  17. 关于将图片转成base64的方法
  18. C语言学习--------修改控制台输出文字颜色
  19. html语言开关控制灯泡,用js控制电灯开关
  20. python制作音乐播放器_python实现音乐播放器 python实现花框音乐盒子

热门文章

  1. Eclipse is running under 1.8, butthis Java project has a 10 Java compliance level, so WindowBuilder
  2. canvas画图被放大且模糊
  3. 6岁男童乞讨养残疾父亲 遭商家空头支票(图)
  4. 线程安全——Atomic系列类(主要实现原子类)
  5. 网易|前端开发实习生 | 杭州 | 2021 一面面经
  6. JavaXYQ 1.4 M1 - 完整的RPG游戏
  7. windows 下 IOCP模型(完成端口)
  8. 机器学习(一):Python一元线性回归模型
  9. 用Python的turtle和matplotlib画出圆满和爱心
  10. input自动获取焦点弹出键盘