PAT 乙级 1032 挖掘机技术哪家强
// 1032 挖掘机技术哪家强.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> PAIR;
bool cmp_byvalue(PAIR& x, PAIR& y) {
return x.second > y.second;
}
struct cmp {
bool operator()(const PAIR& x, const PAIR& y) {
return x.second > y.second;
}
};
int main()
{
int n;
int a, b;
cin >> n;
map<int, int> m;
for (int i = 0; i < n; i++) {
cin >> a >> b;
m[a] += b;
}
vector<PAIR> res(m.begin(), m.end());
sort(res.begin(), res.end(), cmp_byvalue);
sort(res.begin(), res.end(), cmp());
cout << res[0].first << " " << res[0].second;
return 0;
}
两种对map按value遍历的方法
typedef pair<int, int> PAIR;
bool cmp_byvalue(PAIR& x, PAIR& y) {
return x.second > y.second;
}
struct cmp {
bool operator()(const PAIR& x, const PAIR& y) {
return x.second > y.second;
}
};
vector<PAIR> res(m.begin(), m.end());
sort(res.begin(), res.end(), cmp_byvalue);
sort(res.begin(), res.end(), cmp());
想直接访问map的最后一个元素可以用iterator指向map.end(),然后iterator–,但是只能得到map按key排序的最后一位
只是要得到最大值的话,完全可以将得到的map遍历一遍,把最大值和所对应key保存下来输出即可。复杂度为O(N)
我用了排序,复杂度至少为O(nlogn)