牛客网成绩排序c语言,1、成绩排序 -- 牛客

题目描述

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩

都按先录入排列在前的规则处理。

示例:

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

2 #include

3 #include

4 #include

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 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() 函数

需要头文件

语法描述: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::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素

3 for(it=obj.begin();it!=obj.end();it++)

4 {

5 cout<

6 }

标签:sort,成绩,grade,牛客,int,stuVect,排序,cmp

来源: https://www.cnblogs.com/jiashun/p/newcode.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值