本题的思路很直接,就是考察哈希表的使用。由于题目要求存储重复的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;
}