合并表记录

来源:互联网 发布:excel设置数据标签 编辑:程序博客网 时间:2024/06/06 03:08

题目描述

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


输入描述:

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


输出描述:

输出合并后的键值对(多行)


输入例子:
40 10 21 23 4

输出例子:
0 31 23 4


解题思路

根据题意,用STL中的关联容器map来存储数据表比较方便。一方面,map中的元素正是键值对,与数据表的记录相吻合;另一方面,map中元素的键不能重复,并且元素是按照按照键的升序排列的,这与题目的要求是吻合的。


首先创建一个名为list的map容器,每输入一个键值对(key,value),首先应检查list中是否已存在元素,其键与输入的键相同。如果有,则将输入的值加到该元素的值上;否则将该键值对存入list。需要注意的是,可以直接用list[key]+=value来实现以上过程,如果list中不存在键为key的元素,该语句将键值对插入list。


另外,在map中查找和插入一个元素的时间复杂度都是对数的。


代码

#include <iostream>#include <map>using namespace std;int main(){    int count = 0; //键值对的个数    cin >> count;        map<int, int> list; //数据表    int index = 0, value = 0;        for (int i = 0; i < count; ++i)    {        cin >> index >> value;        list[index] += value; //如果index已存在,将值进行合并;如果不存在,插入键值对    }       auto it = list.begin();    while (it != list.end()) //输出合并后的键值对    {        cout << it->first << " " << it->second << endl;        it++;    }        return 0;}


原创粉丝点击