C++排序函数cmp()总结&解决成绩按条件排序问题

2023-05-16

C++中cmp()函数用途很多,特此总结:

  1. 一般数据类型的排序:
#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int a, int b) {
   return a > b;//值传递
}

int main() {
   int a[5] = { 1,5,2,4,3 };
   sort(a, a + 5,cmp);//sort()函数包含在头文件<algorithm>中
   for (int i = 0; i < 5; i++) {
   	cout << a[i] << " ";
   }
   return 0;
}

注意:当sort中第三个参数cmp默认是从小到大排序的

  1. 结构体类型的比较
    例题:

Every semester, our teacher makes a ranklist based on grades of
students. Now he asks you to help making the ranklist.Every student
has two subjects in this semester, mathematics and English.

Here comes the rules of the ranklist. First , sort the sum of grades
of all subjects from high to low. If two students have the same
grades, then rank the student whose mathematics’s grade higher in the
first place. Otherwise, we do nothing when we make the ranklist.

Input For each test case, the first line contains a single integer
N(1<=N<=500) which is the number of students. Following the first
line, there are N lines of the students’ grades. Each line has two
single integer a,b(0<=a,b<=100) seperated by a blank. The first is
mathematics, and the second is English. Output For each test case,
output the ranklist which has N lines. Each line has two single
integers which are the ith(1<=i<=N) rank students’ grades. The first
is mathematics,and the second is English, seperate by a blank. There
is no leading or trailing spaces.

代码1:常规cmp()代码:

#include<iostream>
#include<algorithm>
using namespace std;

struct score {
	int math, eng;
}a[50];

bool cmp(score a, score b) {
	if (a.math + a.eng != b.math + b.eng) return a.math + a.eng > b.math + b.eng;
	else return a.math > b.math;
}

int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i].math >> a[i].eng;
	}
	sort(a, a + n, cmp);
	for (int i = 0; i < n; i++) {
		cout << a[i].math << " " << a[i].eng << endl;
	}
	return 0;
}
  1. cmp函数中&的用法:
#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(const int &a,const int &b){//引用传递
   return a > b;
}

int main() {
   int a[5] = { 1,5,2,4,3 };
   sort(a, a + 5,cmp);//sort()函数包含在头文件<algorithm>中
   for (int i = 0; i < 5; i++) {
   	cout << a[i] << " ";
   }
   return 0;
}

值传递函数将自动产生临时变量用于复制参数,效率较低
引用传递仅借用函数名不产生临时对象,因此效率比值传递高
引用传递”有可能改变参数,const修饰可以解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++排序函数cmp()总结&解决成绩按条件排序问题 的相关文章

  • MybatisPlus-乐观锁&悲观锁

    乐观锁 xff1a 每次不加锁而是假设没有冲突而去完成某项操作 xff0c 如果失败就重试 xff0c 直到成功为止 悲观锁 xff1a synchronized是独占锁即悲观锁 xff0c 会导致其他所有需要锁的线程挂起 xff0c 等待
  • ESP实验02-读取DS1307&eerom34c32

    1 模块介绍 本实验主要用到两个模块 esp32 tinyRTC 模块的图片如下所示 xff1a esp32模块型号为ESP32Devkitc v4 xff0c 是启明云端官方的开发板 与乐鑫官方的完全一致 xff0c 引脚顺序 xff0c
  • 无人机仿真SLAM_gazebo&promethues

    无人机仿真 总体概述系统要求 PX4固件简介无人机固件整体框图无人机软件框图无人机硬件模型 Mavlink模块位置估计与姿态估计模块安装与编译二次开发 机载计算机程序控制模块估计模块仿真模块SLAM模块SLAM效果演示 总体概述 无人机仿真
  • 虚拟化技术介绍 & hypervisor简介

    什么是虚拟化 xff1f 虚拟化 xff08 英语 xff1a Virtualization xff09 是一种资源管理技术 xff0c 是将计算机的各种实体资源 xff0c 如服务器 网络 内存及存储等 xff0c 予以抽象 转换后呈现出
  • Linux下rpm&yum&apt-get

    RPM简介 RPM命名 RedHat Package Manager xff0c 简称则为RPM 属于Red Hat阵营的 xff0c 与其并列的则是debian centos中大部分我们安装都是使用yum install xff0c 而d
  • Lesson 9.2&9.3&9.4 黑箱:不可解释的深层神经网络&探索多层神经网络:层vsh(z)

    二 黑箱 xff1a 深层神经网络的不可解释性 首先从结构上来看 xff0c 多层神经网络比单层神经网络多出了 中间层 中间层常常被称为隐藏层 xff08 hidden layer xff09 xff0c 理论上来说可以有无限层 xff0c
  • 数组名a+1和&a+1的区别

    C C 43 43 里面的数组名字会退化为指针 xff0c 所以数组名a实际指的是数组的第一个元素的地址 而数组名作为指针来讲有特殊性 xff0c 它正在它所指向的内存区域中 xff0c amp a的值和a的数值是相同的 xff08 可以输
  • PX4模块设计之一:SITL & HITL模拟框架

    PX4模块设计之一 xff1a SITL amp HITL模拟框架 1 模拟框架1 1 SITL模拟框架1 2 HITL模拟框架 2 模拟器类型3 MAVLink API4 总结 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分
  • AMP:参考xapp-1078和xapp1079的一些建议

    Linux系统默认是SMP模式 xff0c 有时我们也需要AMP模式进行开发 参考网站 xff1a wiki xilinx com 有xapp1078 xapp1079最新版本的AMP demo www arm com 主要是介绍arm系列
  • 持续请求/socket.io/?EIO=3&transport=polling&t=N8HrzIR

    项目基本介绍 xff1a 使用React xff0c webpack xff0c socket io client Node js Express socket io 等技术 xff0c 采用前后端分离开发 实现项目中的聊天室时遇到报错 x
  • 【STM32学习】——串口通信协议&STM32-USART外设&数据帧/输入数据策略/波特率发生器&串口发送/接受实操

    文章目录 前言一 串口通信1 通信接口2 串口通信 xff08 1 xff09 串口简介 xff08 2 xff09 串口硬件电路 xff08 3 xff09 串口软件部分 二 STM32的USART外设1 USART简介2 图示详解 三
  • A1&AlienGo--通过realsense-viewer调用相机

    使用机器狗时 xff0c 有时需要通过NX 树莓派上的系统来查看调用相机 xff0c 可以通过realsense提供的realsense viewer来查看 但是机器狗自带的视觉程序会开机自启占用相机 xff0c 所以首先需要杀掉这个进程
  • n&(1<<i)用法

    1 lt lt i 是将1左移i位 xff0c 即第i位为1 xff0c 其余位为0 xff1b 例如1 lt lt 2 则0001 gt 0100 n amp 1 lt lt i 是将左移i位的1与n进行按位与 xff0c 即为保留n的第
  • 无人机集群任务规划方法研究综述&论文解读

    无人机集群任务规划方法研究综述 amp 论文解读 参考文献引言 任务规划理论模型 xff1a 分布式任务规划理论分布式智能规划方法的出现 xff1a 无人机集群应用的核心技术集中式 xff1a 分布式集散式 基于逻辑与规则的多无人机任务规划
  • Flask-SQLAlchemy 中的 relationship & backref

    今天重看 Flask 时 xff0c 发现对backref仍然没有理解透彻 查阅文档后发现 xff0c 以前试图孤立地理解backref是问题之源 xff0c backref是与relationship配合使用的 一对多关系 db rela
  • linux中断&poll&selcet按键处理机制

    在上一篇linux按键中断处理中 xff0c 我们采用按键中断处理获取按键 xff0c 在read函数中阻塞读取 xff0c 当按键发生时 xff0c read自动解除阻塞 xff0c 实现应用层读取到相应的按键值 在上一节中如果没有按键到
  • linux中断&poll&selcet按键处理机制

    在上一篇linux按键中断处理中 xff0c 我们采用按键中断处理获取按键 xff0c 在read函数中阻塞读取 xff0c 当按键发生时 xff0c read自动解除阻塞 xff0c 实现应用层读取到相应的按键值 在上一节中如果没有按键到
  • ubuntu(15):对‘casadi::MX::MX(casadi::MX const&)’未定义的引用

    catkin build 编译报错 xff0c 找不到CASADI的头文件目录CASADI INCLUDE DIRS或者库文件也达不到CASADI LIBRARIES xff1b 对 casadi MX horzsplit casadi M
  • 【EXata】2.1 文件组织 & 2.5 Makefile组织

    2 1 文件组织 EXata 发行文件被分组到几个子目录中 这使得用户可以快速找到源代码 二进制对象文件 配置文件 文档或样本 表 2 1 列出了这些子目录和它们的内容 注意 xff1a 在本文件中 xff0c EXATA HOME 指的是
  • JNZ 和 CMP 组装说明

    如果我错了请纠正我 这是我的理解JNZ and CMP JNZ 跳跃将会发生 如果Z标志不为零 1 CMP 如果两个值相等 则Z标志已设置 1 否则未设置 0 这是我正在看的 Flash 教程 它正在教授一个简单的 CrackMe 的解决方

随机推荐

  • Linux /etc/profile.d/*.sh配置环境变量

    文章目录 原理示例 原理 etc profile文件中有如下一段脚本 xff1a span class token keyword if span span class token punctuation span d etc profil
  • 腾讯云服务器-公网IP与域名绑定

    接着上篇 xff0c 腾讯云服务器Ubuntu 配置mysql nginx nodejs cycong108的博客 CSDN博客 现在 xff0c 云服务器已经配置好了 xff0c 其中主要是安装了Nginx xff0c 当在浏览器访问公网
  • nextcloud私有云搭建

    Nextcloud 是一款自由 开源 的类 Dropbox 软件 xff0c 由 ownCloud 分支演化形成 它使用 PHP 和 JavaScript 编写 xff0c 支持多种数据库系统 xff0c 比如 MySQL MariaDB
  • 深度学习环境配置 ubuntu安装CUDA10.2失败!

    深度学习环境配置 ubuntu安装CUDA10 2失败 xff01 按照网上教程安装CUDA10 1 或 CUDA10 2时候 xff0c 即执行官方的命令的时候 root 64 6c000e89a184 sh cuda 10 2 89 4
  • Ubuntu构建ARM交叉编译器

    本文将在一个纯净的Ubuntu 22 04 LTS 下构建ARM交叉编译器 GCC版本为11 1 0 必需的依赖项 xff1a span class token function sudo span span class token fun
  • git配置用户名和邮箱

    局部配置 xff0c 针对具体项目 xff0c 在项目目录下运行命令 xff1a git config user span class token punctuation span name span class token string
  • pve cpu监测 温度功耗监测软件

    https linux cn article 10467 1 html 强烈建议python3 pip3
  • 远程桌面Xrdp登录蓝屏问题

    先卸载了自己之前安装的xrdp和tightvncserver sudo apt get purge xrdp sudo apt get purge tightvncserver sudo apt get install xserver xo
  • 音频编码原理

    一 音频有损压缩技术 消除冗余信息 xff08 有损压缩 xff0c 消除冗余信息后 xff0c 无法还原出原声 xff09 无损压缩 xff08 消除冗余信息后仍能够还原出原声 xff09 音频压缩技术是在保证信号在听觉范围不产生失真的前
  • 关于C语言中的左移与右移

    总结 1 左移时总是移位和补零 无论是有符号类型数据还是无符号类型数据都统称为逻辑左移 2 右移时无符号数是移位和补零 xff0c 此时称为逻辑右移 3 右移时而有符号数大多数情况下是移位和补最左边的位 xff08 也就是补最高有效位 xf
  • win10安装visual studio C++ build tools 提示安装包丢失或毁坏(安装包)

    是不是这个问题 xff1f 网上搜说是证书的问题 xff0c 但我自己一查证书没问题 xff0c 网上又说要fq xff0c 很多都是浏览器fq xff0c 但安装不走浏览器 如果你想查看证书 xff0c 以及后续问题 xff0c 参考文章
  • 安装Node.js(Windows 二进制文件 (.zip))记录

    本次笔者在本地电脑安装Node js xff0c 搭建开发环境 因遇到了一些问题 xff0c 所以 xff0c 留下记录 选择安装官网的LTS版本 xff1a 解压后 xff0c 笔者重命名文件夹名称为 nodejs xff0c 再在目录中
  • win10+VS2017+Cuda10.0环境配置详解

    主要介绍了win10 43 VS2017 43 Cuda10 0环境配置详解 xff0c 文中通过示例代码介绍的非常详细 xff0c 对大家的学习或者工作具有一定的参考学习价值 xff0c 需要的朋友们下面随着小编来一起学习学习吧 文件 x
  • HC06蓝牙模块的手机APP源码

    支持HC05 HC06等蓝牙串口模块 蓝牙串口助手APP下载 支持自定义按钮 适合电子调试 基于E4A易安卓编写 源码开放 大家可以自己制作app 业余制作 界面比较丑 只确保功能尽可能正常 介 HC06蓝牙模块的手机APP源码文件 xff
  • 解决windows 安装wsl的部分问题

    解决windows 安装wsl的部分问题 方法一 修改DNS方法二 windows官网1 启用适用于 Linux 的 Windows 子系统2 启用虚拟机功能3 将 WSL 2 设置为默认版本4 更新wsl内核5 列出发行版本6 安装 方法
  • python中字符串的操作及练习题

    1 字符串的特性 索引 In 1 s 61 39 hello 39 In 2 print s 0 h In 3 print s 1 e 切片 In
  • git命令

    git 一 git命令二 git工作流程三 开发流程四 上传私有化项目本地有更改 xff0c git pull拉取代码成功 xff0c 但是代码没有拉下来5 2 xff1a 将本地分支推送到云端分支 一 git命令 二 git工作流程 1
  • Python截取选择区域图片//2021-1-28

    前言 xff1a 最先使用这个功能的初衷是因为利用Python的OCR库 tesseract xff0c 把图片转换后得到的数据不好处理 xff0c 故为了减少不好处理部分的数据 xff0c 减少转化图片的范围 xff0c 所以先通过截图
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va
  • C++排序函数cmp()总结&解决成绩按条件排序问题

    C 43 43 中cmp xff08 xff09 函数用途很多 xff0c 特此总结 xff1a 一般数据类型的排序 xff1a span class token macro property span class token direct