排序小记【2】对 struct 的排序
2024-10-06 12:34:18
有了前面的内容,对于一般的排序已经没有问题了,但是有时候排序的要求可能会有点刁。。。
举个简单的例子,应该是NOIP2009的分数线划定,差不多算是一个比较高级的排序(吧)。
多关键字排序(?)
我一直以为是这个名字的,弄错了别打我。。。
比方说对一群学生的考试成绩排序,同分的学生那么序号小的排前面
刚道理我是不知道怎么对两个数组这么排的,所以我就把它挂在一起:
struct seq{ int order; int mark; };
//当然二维数组也可以,应该可以转化为前一篇的内容,只要把cmp改写一下就好了(没试过)
为此,cmp就要改写一下,满足sort的需求:
bool cmp(seq a,seq b){ if (a.mark == b.mark){ return a.order < b.order; } else{ return a.mark > b.mark; } }
问题来了:sort怎么写?
度娘了一下,sort的前两个参数类型是指针,分别指向序列头和序列尾。那坠吼啊,取地址就好了。
sort(&line[],&line[n],cmp);
然而又错了一波,而且错因和前一篇一样(不说了直接改)
sort(&line[],&line[n+],cmp);//1-n序列排序的正确写法
苦力老师对不起把我打死吧。。。
全文如下:
#include <cstdio> #include <algorithm> struct seq{ int order; int mark; }; bool cmp(seq a,seq b){ if (a.mark == b.mark){ return a.order < b.order; } else{ return a.mark > b.mark; } } using namespace std; seq line[]; int n; int main(int argc, char const *argv[]){ scanf("%d",&n); ; i <= n; ++i){ scanf("%d %d",&line[i].order,&line[i].mark); } sort(&line[],&line[n+],cmp); printf("\n"); ; i <= n; ++i){ printf("%d %d\n", line[i].order,line[i].mark); } ; }
顺便练了一下struct。。。网上好多code都把数组写vector里,我是个蒟蒻,不是很会这些高级东西,不过原理想来差不多(逃
总结:
综上,对自定义数据结构struct进行排序,只要改写一下cmp就好了。如果在struct中重载比较运算符,那么functional里的诸如less<>()这些应该也能用。cmp具体怎么写看题干咯。。。
最新文章
- Hacker Rank: Two Strings - thinking in C# 15+ ways
- some OpenGL constants
- Something about Wake-sleep
- 十分钟让你的javascript登峰造极
- 简单的 JSON 对象进行深拷贝最简单的方法
- MyISAM与InnoDB两者之间怎么选择
- centos 修改网卡名为eth0
- react native ScrollView
- Eclipse @override报错解决
- c++11多线程简介
- 用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(中)
- 深入研究Spark SQL的Catalyst优化器(原创翻译)
- 06_MyBatis,Spring,SpringMVC整合
- 正则表达式regex(golang版)
- word2007无法打开.doc
- VMWare 14.1 15 Pro 安装 macOS Mojave 10.14.1系统 遇到的问题解决方案
- UE4中Timeline的使用
- 简单使用dom4j
- XAMPP环境的搭建
- CoreThink开发(十三)增加页面加载动画