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

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

排序小记【2】对 struct 的排序的更多相关文章

  1. 数据结构:堆排序 (python版) 小顶堆实现从大到小排序 | 大顶堆实现从小到大排序

    #!/usr/bin/env python # -*- coding:utf-8 -*- ''' Author: Minion-Xu 小堆序实现从大到小排序,大堆序实现从小到大排序 重点的地方:小堆序 ...

  2. [DataTable]控件排序事件中用DataView及DataTable排序

    控件排序事件中用DataView及DataTable排序 文章分类:.net编程 在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridVi ...

  3. 排序算法c语言描述---选择排序

    排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析. 文章规划: 一.通过自己对排序算法本身的理解,对每个方法写个小测试程序. 具体思路分析 ...

  4. 简单选择排序 Selection Sort 和树形选择排序 Tree Selection Sort

    选择排序 Selection Sort 选择排序的基本思想是:每一趟在剩余未排序的若干记录中选取关键字最小的(也可以是最大的,本文中均考虑排升序)记录作为有序序列中下一个记录. 如第i趟选择排序就是在 ...

  5. 算法 排序lowB三人组 冒泡排序 选择排序 插入排序

    参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...

  6. Python实现八大排序算法(转载)+ 桶排序(原创)

    插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 ...

  7. mysql关于排序值的问题,指定排序值

    SELECT a.* FROM `catalog_eav_attribute` ea JOIN `eav_attribute` a ON ea.`attribute_id`=a.`attribute_ ...

  8. 排序算法<No.7>【希尔排序】

    排序算法进入到第7篇,这个也还是比较基础的一种,希尔排序,该排序算法,是依据该算法的发明人donald shell的名字命名的.1959年,shell基于传统的直接插入排序算法,对其性能做了下提升,其 ...

  9. 排序算法<No.3>【桶排序】

    算法,是永恒的技能,今天继续算法篇,将研究桶排序. 算法思想: 桶排序,其思想非常简单易懂,就是是将一个数据表分割成许多小数据集,每个数据集对应于一个新的集合(也就是所谓的桶bucket),然后每个b ...

随机推荐

  1. NGINX: 反向代理 Nexus

    Nginx 反向代理 nexus 的服务, 一直卡在 Initialize... 解决方式是添加一个 header X-Forwarded-Proto: proxy_set_header X-Forw ...

  2. jsp之jstl核心标签库

    JSTL核心标签库技术 1. JSTL介绍 在JSP页面中即可书写html,也可以书写Java代码,导致页面混乱,维护,修改,升级难度加大,于是国际上不同的公司在实际应用中,根据页面的需求将Java代 ...

  3. Android中自定义属性attr.xml的格式详解

    1. reference:参考某一资源ID.     (1)属性定义:             <declare-styleable name = "名称">      ...

  4. 【EverydaySport】健身笔记——人体肌肉分解图

    正面 背面 大肌肉群:胸.背.腿大肌肉群. 建议一周锻炼一次. 小肌肉群:肩.二头肌.三头肌.小臂.小腿.腹肌小肌肉群. 可以一周安排两次. 小腿.小臂肌群属于耐受肌群可以一周安排3次. 建议初学者就 ...

  5. Redis 主从部署

    Redis 主从部署 http://www.xuchanggang.cn/archives/978.html

  6. redis可编译

    redis-3.0.7 可编译 redis-3.0.7.tar.gz twemproxy-master.zip keepalived-1.2.19.tar.gz openssl-1.0.1s.tar. ...

  7. oracle to_char 返回毫秒级

    select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ssxff') time1, 关键在 systimestamp

  8. vue做购物车

    写一点废话,昨天敲代码找bug,找了好久都没找到,后来一哥们找到他说,找代码的bug就像男女朋友吵架,女问男你错了没,男说错啦,女再问错哪了,男傻眼了不知道错哪.在找代码的过程中一直知道我错啦就是找不 ...

  9. f1 f12热键关闭

    fn+f2进入bios系统——>找到configuration——>Hotkey Mode——>enter——>选择disable——>fn+f10保存

  10. hadoop-Rpc使用实例

    代码:https://github.com/xufeng79x/hadoop-common-rpc-demo 1. 简介 hadoop中使用rpc机制来进行分布式进程间的通信,被封装进了hadoop- ...