本题的思路很直接,就是考察哈希表的使用。由于题目要求存储重复的key值,所以先用multimap来存储所有的哈希表。然后对其进行判断,相同的key值求和后放入新的表中,不用的key值直接放入表中。由于map本身就是有序的,所以输出时已经按照升序输出了。
#include <map>
using namespace std;
int main() {
int N;
cin >> N;
multimap<int, int> multi_map;
int key = 0, value = 0;
for (int n = 0; n < N; n++) {
cin >> key;
cin >> value;
multi_map.insert(pair<int,int>(key, value));
}
map<int, int> my_map;
for (multimap<int,int>::iterator iter = multi_map.begin(); iter != multi_map.end(); iter++) {
if (my_map.find(iter->first) != my_map.end()) {
// 表示当前key对应的元素已经存入map中了,则将相同key的元素求和
my_map[iter->first] += iter->second;
} else {
// 表示当前key对应的元素还没有存入map中
my_map[iter->first] = iter->second;
}
}
// 输出
for (map<int, int>::iterator iterr = my_map.begin(); iterr != my_map.end(); iterr++) {
cout << iterr->first << " " << iterr->second << endl;
}
return 0;
}