合并表记录(C/C++)

来源:互联网 发布:淘宝店铺爆款神器软件 编辑:程序博客网 时间:2024/06/09 23:57

题目描述
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开

输出描述:
输出合并后的键值对(多行)
输入例子:
4
0 1
0 2
1 2
3 4

输出例子:
0 3
1 2
3 4

解题思路:

本题可以使用关联容器map来处理,因为关联容器本质上是红黑树,实现自平衡,元素位置取决于特定的排序准则,和插入顺序无关,因此在输出的时候是经过排序的。我们所要做的就是在输入的时候将索引值相同的进行合并。

#include<iostream>#include<map>using namespace std;int main(){int length;int index, value;map<int, int> Table;while (cin >> length){for (int i = 0; i < length; i++){cin >> index >> value;if (!Table[index]) //若之前map中不存在此索引值的数值,则进行赋值Table[index] = value;else    //若之前map中存在此索引值的数值,则进行累加,即进行合并Table[index] += value;}for (auto it = Table.begin(); it != Table.end; it++){cout << (*it).first << " " << (*it).second << endl;}}system("pause");return 0;}

拓展:

STL中提供了4种关联容器:set、multiset、map和multimap。区别是:

set:其值类型和键相同,键是唯一的,这意味着集合中不会有多个相同的键,对于set来说,值就是键。

multiset:类似于set,只是可能有多个值的键相同。

map:值与键的类型不同,键是唯一的,每个键只对应一个值。

multimap:类似于map,只是一个键可以与多个值相关联。



原创粉丝点击