题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
示例:
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