谈谈结构体部分成员排序(重载的利用/sort)

涉及知识点:

1.重载运算符的知识

2.sort函数的使用

3.高精度排序

sort函数的用法?

通过面向百度GOOGLE编程的我,得知,sort的用法

sort函数详解(史上最完整QAQ) - AlvinZH - 博客园

对于数组而言,sort语法结构为 sort(数组名,数组名+数组长度)//可以有第三个参数,为比较函数,一般来说都是要做一个比较函数的。

对于vector容器而言,sort语法结构为 sort (迭代器.begin(),迭代器.end())//可以有第三个参数

重载运算符有什么用?

可以扩充各种操作符,更方便运用和避免部分复杂语法。

在本篇文章中重载小于号,使比较操作放在结构体内进行,相比于比较函数,更加节省时间,访问速度更快

语法结构为 bool operator 需要重载的符号 (形参列表){ to do }

bool operator <(const people &orter)const{return z < orter.z
}

例题1:洛谷算法1-2 P5143 攀岩者

传送门:攀爬者 - 洛谷

 

思路 ,根据题目的意思,先要将输入的数据进行一个关于高度成员的排序,此时有两种思路,1.sort ,做一个比较函数来比较结构体成员大小;

2.sort,利用重载技术,重载小于号符号,使比较在结构体内部进行。

上题解:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
#define MAX 5000
struct Node {double x, y, z;bool operator <(const Node& other)const {return z < other.z;//高度逐渐增高/}
}NodeXYZ[MAX];
int main()
{int n;cin >> n;for (int i = 0; i < n; i++) {scanf("%lf%lf%lf", &NodeXYZ[i].x, &NodeXYZ[i].y, &NodeXYZ[i].z);}sort(NodeXYZ, NodeXYZ + n);//根据高度从小到大排序。这里对小于号重载,sort排序在结构体内部进行,节省时间double distance = 0;double cx = NodeXYZ[0].x, cy = NodeXYZ[0].y, cz = NodeXYZ[0].z;for (int i = 0; i < n; i++) {distance += sqrt(abs(cx - NodeXYZ[i].x) * abs(cx - NodeXYZ[i].x) + abs(cy - NodeXYZ[i].y) * abs(cy - NodeXYZ[i].y) + abs(cz - NodeXYZ[i].z) * abs(cz - NodeXYZ[i].z));//两点的欧几里得距离cx = NodeXYZ[i].x;cy = NodeXYZ[i].y;cz = NodeXYZ[i].z;}printf("%.3lf\n", distance);
}

什么是高精度排序?

高精度排序,有多种表示方式,有用数组的,也可以用string做成字符串。本次使用后者

我们知道,编译器无法去接受特别大的数,如9999!这时候就要利用的高精度的知识。

通过将一大串数字转化成字符串的思想(或者把几个数字存在数组的一个位置中,也被称压缩高精度)就可以实现编译器的读写。

例题2: 洛谷算法1-2 P1781 宇宙总统

传送门:宇宙总统 - 洛谷

思路  数据过大,这时候就要考虑高精度的排序方法,先做一个string类型的变量,for循环连续输入string变量。再去比较这几个数的长度:

1.如果长度不一,大的作为max。

2.如果长度相同,比较值的大小。

上题解:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<string>int main() {string max = " ";//一开始把max定义i成空格,后续进行比较,大的就替换string in;int n,id;//id是记录最多人的编号cin >> n;for (int i = 1; i <= n; i++) {cin >> in;int inSize = in.size();int maxSize = max.size();if (inSize > maxSize || (inSize >= maxSize && in > max)) {max = in;id = i;}}cout << id << endl << max;
}

最后来一道真正需要用到结构体成员排序的题

例题3: 洛谷算法1-2 P1093 奖学金

传送门:[NOIP2007 普及组] 奖学金 - 洛谷

题解:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#define MAX 500
#include<algorithm>struct people {int chinese;int english;int math;int sum;int num;//编号
}students[MAX];
//比较函数一般自己构造。结构体部分元素的排序通过sort的比较函数部分实现。
bool compare(people s1, people s2)
{if (s1.sum > s2.sum) return 1;else if (s1.sum < s2.sum) return 0;else{if (s1.chinese > s2.chinese) return 1;else if (s1.chinese < s2.chinese) return 0;else{if (s1.num > s2.num) return 0;else return 1;}}
}
int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {students[i].num = i;cin >> students[i].chinese >> students[i].english >> students[i].math;students[i].sum = students[i].chinese + students[i].english + students[i].math;}sort(students+1, students+1 + n, compare);for (int i = 1; i <= n ; i++)cout << students[i].num << " " << students[i].sum << endl;
}

 这里我一开始错了,语法错误是people成员未定义,仔细排查才知道,原来是把比较函数放在结构体前面了,导致people成员未定义

 今天的文章就分享到这,编程小白,知识掌握尚浅,若有出入和漏洞,希望大佬们能提点一二。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt最大化和还原实现_研究进展 | 水生所关于细菌异化型硝酸盐还原成铵与反硝化脱氮两种途径抉择的分子调控机制研究取得进展...

在无氧和缺氧条件下&#xff0c;许多细菌可利用硝酸根和亚硝酸根作为电子受体进行无氧呼吸&#xff0c;包括异化型硝酸盐还原成铵(dissimilatory nitrate reduction (DNR) to ammonia&#xff0c;DNRA)和反硝化脱氮(denitrification)两种相互竞争的DNR途径&#xff0c;在氮元素…

rabbitmq 集群 ha负载 Consumer raised exception, processing can restart if the connection factory

文章目录1. 背景2. 现象3. 原因分析4. 解决方案5. 成功案例1. 背景 线上有一个rabbitmq 集群,一台磁盘模式的 两台内存模式的. 使用erlang 做cookie 做同步.haproxy做负载 2. 现象 在连接一会后 程序抛出异常 Consumer raised exception, processing can restart if the con…

2019 年,容器技术生态会发生些什么?

1. Kubernetes 项目被采纳度将持续增长 作为“云原生”&#xff08;Cloud Native&#xff09;理念落地的核心&#xff0c;Kubernetes 项目已经成为了构建容器化平台体系的默认选择。但是&#xff0c;不同于一个只能生产资源的集群管理工具&#xff0c;Kubernetes 项目最大的价…

中国科学院院士徐宗本:人工智能的基石是数学

来源&#xff1a;科学网 “人工智能的基石是数学&#xff0c;没有数学基础科学的支持&#xff0c;人工智能很难行稳致远。” 近日&#xff0c;由联合国教科文组织和中国工程院联合主办的联合国教科文组织国际工程科技知识中心2019国际高端研讨会上&#xff0c;中国科学院院士、…

编写一个C程序,实现以下功能:输入n个人的身高,然后从n个人中选出身高差值最小的两个人作为礼仪(如果差值相同的话,选取其中最高的两个人),要求输出两个礼仪的身高。

题目要求 编写一个C程序&#xff0c;实现以下功能&#xff1a; 输入n个人的身高&#xff0c;然后从n个人中选出身高差值最小的两个人作为礼仪 &#xff08;如果差值相同的话&#xff0c;选取其中最高的两个人&#xff09;&#xff0c;要求输出两个礼仪的身高。&#xff08;使用…

Jenkins操作手册

文章目录一、企业实战(JenkinsGitLabSonarQube)1. Jenkins下载2. Jenkins运行3. .Jenkins登录4. Jenkins安装推荐插件5. Jenkins创建管理员用户6. Jenkins自定义安装插件7. Jenkins 安全设置8. jenkins安装和第一个Java项目构建9. jenkins发布项目到测试环境10. Jenkins通过Dep…

MySQL运维实战 之 PHP访问MySQL你使用对了吗

大家都知道&#xff0c;slow query系统做的好不好&#xff0c;直接决定了解决slow query的效率问题 一个数据库管理平台&#xff0c;拥有一个好的slow query系统&#xff0c;基本上就拥有了解锁性能问题的钥匙 但是今天主要分享的并不是平台&#xff0c;而是在平台中看到的奇…

三个数差的平方公式推导过程_勾股数公式的简单推导

勾股数 是指满足 的正整数&#xff0c;它们的通用公式为 &#xff0c;下边我从定义出发&#xff0c;利用平方差公式举例实验找规律&#xff0c;推导出这一通用公式。由 可知 当 为奇数时 和 全都是奇数&#xff1b;当 为偶数时 和 全都是偶数。&#xff08; &#xff0c;与 同奇…

通过阿里云K8S Ingress Controller实现路由配置的动态更新

简介 在Kubernetes集群中&#xff0c;Ingress作为集群内服务对外暴露的访问接入点&#xff0c;其几乎承载着集群内服务访问的所有流量。我们知道&#xff0c;Nginx Ingress Controller是Kubernetes社区很重要的一个子项目&#xff0c;其内部主要依托于高性能的负载均衡软件Ngi…

编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s

题目描述&#xff1a; 编写一个C程序&#xff0c;实现以下功能&#xff1a; 用一个函数实现两个字符串的比较&#xff0c;即自己写一个strcmp函数&#xff0c;函数原型为&#xff1a; int strcmp(char *p1,char *p2); 设p1指向字符串s1&#xff0c;p2指向字符串s2&#xff0c;…

工作流实战_14_flowable_已办任务列表查询

项目地址&#xff1a;https://gitee.com/lwj/flowable.git 分支flowable-base 视频讲解地址 https://space.bilibili.com/485524575/channel/detail?cid94579 1、演示 2、代码 这里也是通过sql来查询的 SELECT DISTINCTt1.ID_ AS taskId,t1.NAME_ AS taskName,t2.FIRST_ AS…

SpringBoot使用prometheus监控

本文介绍SpringBoot如何使用Prometheus配合Grafana监控。 1.关于Prometheus Prometheus是一个根据应用的metrics来进行监控的开源工具。相信很多工程都在使用它来进行监控&#xff0c;有关详细介绍可以查看官网&#xff1a;https://prometheus.io/docs/introduction/overview/…

合同相似可逆等价矩阵的关系及性质_笔记:辛矩阵和Siegel上半平面

1.辛矩阵&#xff08;1.1&#xff09;定义。 设 , 是交换幺环。定义其中 &#xff0c;以及注意&#xff0c;对任意 , 令 &#xff0c;演算知 。因此有群概形的正合列&#xff1a;&#xff08;1.2&#xff09;等价条件。设 &#xff0c;利用分块矩阵计算&#xff0c;可知下述条件…

详解异构计算FPGA基础知识

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 浩仔责编 | 阿秃随着云计算&#xff0c;大数据和人工智能技术应用&#xff0c;单靠CPU已经无法满足各行各业的算力需求。海量数据分析、机器学习和边缘计算等场景需要计算架构多样化&#xff0c;需要不同的处理器架构和GPU&a…

开发函数计算的正确姿势——使用 brotli 压缩大文件

大文件问题 函数计算对上传的 zip 代码包尺寸限制为 50M。某些场景中代码包中会超过这一限制&#xff0c;比如二进制 serverless-chrome 经过一番裁剪以后 ZIP 压缩包的体积为 43.4M&#xff0c;类似的还有 liboffice &#xff0c;此外常见的还有机器学习训练的模型文件。 目…

流程变量的分组_01

项目地址&#xff1a;https://gitee.com/lwj/flowable.git 分支flowable-base 视频地址&#xff1a;https://www.bilibili.com/video/av79774697/ 业务场景&#xff1a; 实际场景中&#xff0c;有可能我们的流程变量会比较多&#xff0c;如果一个变量就作为一条记录存储的话&a…

编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。

DGUT最简单的题。没有之一&#xff0c;只要面向GOOGLE和百度编程就行。 在GOOGLE查询malloc和realloc。 malloc&#xff1a;动态申请内存。 realloc&#xff1a;动态更改&#xff08;扩展&#xff09;内存 代码如下 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.…

amd显卡风扇调节_中端游戏显卡新晋黑马,华硕ROG STRIX RX5600XT O6G GAMING拆解评测...

在年初的CES2020上&#xff0c;AMD发布了面向中端市场的Radeon RX 5500 XT&#xff0c;进一步完善了自己的游戏显卡产品线。在本月21日&#xff0c;RX 5600 XT正式解禁发布。各大AIB厂商也在第一时间推出了自己的相关产品。我们也在第一时间收到了来自华硕的ROG STRIX RX5600XT…

集成源码深度剖析:Fescar x Spring Cloud

Fescar 简介 常见的分布式事务方式有基于 2PC 的 XA (e.g. atomikos)&#xff0c;从业务层入手的 TCC( e.g. byteTCC)、事务消息 ( e.g. RocketMQ Half Message) 等等。XA 是需要本地数据库支持的分布式事务的协议&#xff0c;资源锁在数据库层面导致性能较差&#xff0c;而支…

CPU 到底是怎么认识代码的?涨姿势了!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | brightwang责编 | 阿秃最近读到这样一篇好文章&#xff0c;从底层硬件角度出发剖析了一下CPU对代码的识别和读取&#xff0c;内容非常精彩&#xff0c;读完感觉大学里学到的很多东西瞬间联系起来了&#xff0c;这里分享给大家…