题目描述:
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
输入例子:
4
0 1
0 2
1 2
3 4
输出例子:
0 3
1 2
3 4
map是关键字-值对的集合,而且map本身就是按照key值的大小存储的,所以只需要执行读入和读出的操作。
#include <iostream>
#include <map>
using namespace std;
int main()
{
int n;
while (cin >> n){
map<int, size_t> m;
for (int i = 0; i < n; i++){
int k, j;
cin >> k;
cin >> j;
auto ret = m.insert({k, j});
if (!ret.second){
for (int a = 0; a < j; a++)
++ret.first->second;
}
}
for (auto c: m)
cout << c.first << " " << c.second << endl;
}
return 0;
}
在输入map方面,以下代码更好理解:
while(n-- && cin >> k >> j){
m[k] += j; //不存在的时候默认是0,存在则累加
}