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

举个简单的例子,应该是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. Centos 6 FTP 配置

    How to configure ftp server on centos 6 Posted  krizna  Centos FTP – File transfer protocol is used ...

  2. 阿里云服务器下安装配置 vsftpd —— 基于CentOS 6.3 【简洁版】

    原文链接:http://www.tuicool.com/articles/nuiQBja 1.更新yum源 我是直接 yum update 更新的 2.安装vsftp 使用yum命令安装vsftpd ...

  3. Windows 提权对照表 精确到sp版本号

    https://www.securitysift.com/download/MS_privesc_and_exploits_table.csv

  4. pcap的安装

    pcap,即 packet capture library 抓包库,这个抓包库给抓包系统提供了一个高层次的接口.所有网络上的数据包,甚至是那些发送给其他主机的,通过这种机制,都是可以捕获的.它也支持把 ...

  5. 直观理解js自执行函数

    要在函数体后面加括号就能立即调用,则这个函数必须是函数表达式,不能是函数声明: Jslint推荐的写法: (function(){alert(1);}()); 针对函数声明,使用().!.+.-.=. ...

  6. (转)LSI SAS 1068E Raid CentOS 5.5 安装实例浪潮NF5220系列 分类: linux

    新来了一批服务器,全都是清一色的国产服务器,相同的阵列卡,令人头疼的是Linux标准内核不包含该raid驱动,需要单独安装,如果是新升级内核,肯定需要编译进去该raid驱动.一.先把主板自带的驱动光盘 ...

  7. Mel倒谱系数

    Mel倒谱系数:MFCC Mel频率倒谱系数(Mel Frequency Cepstrum Coefficient)的缩写是MFCC,Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系 ...

  8. AMD嵌入式G系列SoC协助优化Gizmo 2开发板

    http://www.gizmosphere.org/ AMD嵌入式G系列SoC协助优化Gizmo 2开发板 http://news.zol.com.cn/491/4910444.html

  9. python mysql插入数据遇到的错误

    1.数据插入的时候报错:not enough arguments for format string,大概意思就是说没有足够的参数格式化字符串. 我的数据库插入方法是这样的 def add_data( ...

  10. Deep Learning基础--参数优化方法

    1. 深度学习流程简介 1)一次性设置(One time setup)          -激活函数(Activation functions) - 数据预处理(Data Preprocessing) ...