• 成绩排序 -- 牛客


    题目描述

    查找和排序

    题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
    都按先录入排列在前的规则处理。

    示例:
    jack      70
    peter     96
    Tom       70
    smith     67

    从高到低  成绩 
    peter     96 
    jack      70 
    Tom       70 
    smith     67

    从低到高

    smith     67

    jack      70 

    Tom      70 
    peter     96

    输入描述:

    输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开

    输出描述:

    按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

    示例:

    输入:

    3
    0
    fang 90
    yang 50
    ning 70

    输出:

    fang 90
    ning 70
    yang 50

    解决思路


    1、这是一道多条件排序问题。首先需要建立结构体来存放字符串与整型变量

    2、利用stable_sort() 来根据进行升序,降序排列。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <string>
     4 #include <vector>
     5 using namespace std;
     6 
     7 typedef struct stu
     8 {
     9     string name;
    10     int grade;
    11 }student;
    12 
    13 int cmp1(student a,student b)
    14 {
    15     return a.grade > b.grade;
    16 }
    17 
    18 int cmp2(student a,student b)
    19 {
    20     return a.grade < b.grade;
    21 }
    22 
    23 
    24 int main()
    25 {
    26     int count=0,cmp=0;
    27     student s;
    28     int grade;
    29     string name;
    30     int n = count;
    31     while(cin >> count >> cmp)
    32     {
    33         vector<student> stuVect;
    34         while(count--)
    35         {
    36             cin >> name >> grade;
    37             s.name = name;
    38             s.grade =grade;
    39             stuVect.push_back(s);
    40         }
    41             if(cmp == 0)
    42                 stable_sort(stuVect.begin(),stuVect.end(),cmp1);
    43             if(cmp == 1)
    44                 stable_sort(stuVect.begin(),stuVect.end(),cmp2); 
    45         
    46         for(auto it = stuVect.begin(); it != stuVect.end(); it++)
    47         cout << it -> name << ' ' << it -> grade << endl;
    48     }
    49     return 0;
    50 }

    summary

    遇到了很多的麻烦,通过这道题目我也认识到了很多新的知识点

    1、sort() 函数  与 stable_sort() 函数

    • 需要头文件<algorithm>
    • 语法描述:sort(begin,end,cmp)stable_sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序。
    • stable_sort() 函数 可保证相等元素的原本相对次序在排序后保持不变
    • 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b);
    • 简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是非降序排列。
    • 对于vector 变量来说,sort(v.begin(),v.end())

    在这里要注意一下函数的 cmp 参数:

    如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。

    比较函数是一个自己定义的函数,返回值是bool型或整型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp

    1 bool cmp(int a,int b)
    2 {
    3    return a>b;
    4 }

    2、vector 容器的应用

    • push_back 在数组的最后添加一个数据
    • pop_back 去掉数组的最后一个数据
    • at 得到编号位置的数据
    • begin 得到数组头的指针
    • end 得到数组的最后一个单元+1的指针

    3、访问vector 

    1     //使用迭代器将容器中数据输出 
    2     vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素 
    3     for(it=obj.begin();it!=obj.end();it++)
    4     {
    5         cout<<*it<<" ";
    6     }

      

  • 相关阅读:
    2017.5.11下午学习内容
    windows消息和消息队列
    探索Win32系统之窗口类(转载)
    WinMain函数详解(转载)
    Ajax爬取实战头条街拍美图
    Ajax实战微博
    Ajax请求分析实战
    ubuntu 安装rails
    ubuntu Thunderbird 接收邮件显示乱码的问题排除
    ubuntu 开机挂载windows分区
  • 原文地址:https://www.cnblogs.com/jiashun/p/newcode.html
Copyright © 2020-2023  润新知