一:要求
输入乱序的 成绩单 包括 姓名和成绩,成绩按照递增顺序 输出,如果遇见成绩相同的
按名字的字典序输出。
示例:
输入
5
w 12
a 12
v 7
c 3
e 9
输出:
c 3
v 7
e 9
a 12
w 12
二:代码实现
#include<bits/stdc++.h>
using namespace std;struct Node {string name;int grate;
};bool cmp(Node node1,Node node2) {if(node1.grate == node2.grate) return node1.name < node2.name; return node1.grate < node2.grate;
}int main() {Node* node = new Node[100];int n;cin >> n;for (int i = 0; i < n; i++) {cin >> node[i].name >> node[i].grate;}sort(node,node+n,cmp);for (int i = 0; i < n; i++) {cout << node[i].name << " " << node[i].grate << endl; }}
三:知识扩展关于重排序
1:vector的sort方法也可以实现重新排序
(1):bool函数
bool cmp(int a,int b) {return a > b;
}
(2):代码
#include<bits/stdc++.h>
using namespace std;bool cmp(int a,int b) {return a > b;
}int main() {int n;vector<int> v;cin >> n;for (int i = 0; i < n; i++) {int nums;cin >> nums;v.push_back(nums);}sort(v.begin(),v.end(),cmp);for(auto temp : v) {cout << temp << " ";}
}
2:map也可以实现重排序
(1):前言
这里map实现的是对key值得升序遍历,那么我们利用迭代器得逆序遍历不就实现降序处理了吗
(2):核心代码
map<int,int>::reverse_iterator mt;for (mt = m.rbegin(); mt != m.rend(); mt++){//注意遍历的时候是rbegin(),r,end()
}
/**思路:这里实现逆序主要是利用迭代器逆序遍历 */#include<bits/stdc++.h>
using namespace std;int main() {map<int,int> m;map<int,int>::reverse_iterator mt; int a[5] = {5,4,3,2,1};for(int i = 0; i < 5; i++) {m[a[i]] = i;}for (mt = m.rbegin(); mt != m.rend(); mt++) {cout << mt->first << " " << mt->second << endl;}}