有了前面的内容,对于一般的排序已经没有问题了,但是有时候排序的要求可能会有点刁。。。

举个简单的例子,应该是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具体怎么写看题干咯。。。

最新文章

  1. Hacker Rank: Two Strings - thinking in C# 15+ ways
  2. some OpenGL constants
  3. Something about Wake-sleep
  4. 十分钟让你的javascript登峰造极
  5. 简单的 JSON 对象进行深拷贝最简单的方法
  6. MyISAM与InnoDB两者之间怎么选择
  7. centos 修改网卡名为eth0
  8. react native ScrollView
  9. Eclipse @override报错解决
  10. c++11多线程简介
  11. 用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(中)
  12. 深入研究Spark SQL的Catalyst优化器(原创翻译)
  13. 06_MyBatis,Spring,SpringMVC整合
  14. 正则表达式regex(golang版)
  15. word2007无法打开.doc
  16. VMWare 14.1 15 Pro 安装 macOS Mojave 10.14.1系统 遇到的问题解决方案
  17. UE4中Timeline的使用
  18. 简单使用dom4j
  19. XAMPP环境的搭建
  20. CoreThink开发(十三)增加页面加载动画

热门文章

  1. 【CodeForces】835D Palindromic characteristics
  2. python学习笔记(九)之字符串
  3. Winform MD5
  4. 64_l6
  5. 【NOIP2016】组合数问题
  6. spring boot&amp;&amp;cloud干货系列
  7. selenium+python自动化78-autoit参数化与批量上传【转载】
  8. C语言实现二叉排序树
  9. js解析与序列化json数据(一)json.stringify()的基本用法
  10. 【转载】Web Service 的工作原理