C++容器map的key相同,如何合并对应的values

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++容器map的key相同,如何合并对应的values相关的知识,希望对你有一定的参考价值。

例如若干学生有学号,成绩,课程三个属性
学号N 成绩T 课程L
10 90 语文
11 91 语文
12 90 数学
10 92 数学
... ... ...

剩下的学生课程就不多例举了
现在整个map
map<int16,int64> map1;
map1.insert(map<int16,int64>::value_type(10,90));
map1.insert(map<int16,int64>::value_type(11,91));
map1.insert(map<int16,int64>::value_type(12,90));
map1.insert(map<int16,int64>::value_type(10,92));
...
然后我想讲两个学号为10的成绩合并成182,变成
map<int16,int64>::value_type(10,182);
...就像为某个班级的学生计算总分一样,输入学生的学号和每课成绩,自动计算出每个学生的总分,形成新的数据。
该怎么做??

1、如果重复添加的话,hashmap会自动覆盖key一样的数据,保证一个key对应一个value
也就是说,只要把一个map2里的数据按照key一个一个都加到map1里去就行了,但是这样会破坏map1如果是想保持原来的不变,可以先新建一个空的hashmap,把map1和map2的数据都加进去就可以了
2、例如:
HashMap map3 = new HashMap();
for (Object key : map1.keySet())
map3.put(key, map1.get(key));
for (Object key : map2.keySet())
map3.put(key, map2.get(key));
//可以根据具体的类型加上泛型模板
参考技术A 使用map1[key] += values;应该可以,你试试。如果不存在则会新建,存在就加上数据。本回答被提问者采纳

使用例子解释C++中的map容器

map是一个以键值对形式存储元素的容器。它类似于Java中的集合,PHP中的关联数组或JavaScript中的对象。

下面是使用 map 的好处:

  • map 只存储唯一的key,同时这些key都是排序的

  • 由于 map 中的key都已经排序,再里面查找一个元素非常快

  • 每一个元素 key都只对应一个值

下面看一个例子:

#include <iostream>
#include <map>

using namespace std;

int main (){
  map<intint> numberValues;
  map<charint> charValues;

  //initializing

  numberValues[1]=10;
  numberValues[3]=20;
  numberValues[2]=30;
  numberValues[6]=40;

  charValues['a']=10;
  charValues['b']=20;
  charValues['c']=30;
  charValues['d']=40;

   map<intint>::iterator it1;
   map<charint>::iterator it2;

   for(it1=numberValues.begin(); it1!=numberValues.end(); ++it1){
      cout << it1->first << " => " << it1->second << '\n';
   }

   for (it2=charValues.begin(); it2!=charValues.end(); ++it2) {
       cout << it2->first << " => " << it2->second << '\n';
   }

  return 0;
}

Output

1 => 10
2 => 30
3 => 20
6 => 40
a => 10
b => 20
c => 30
d => 40

Map的基本用法

创建一个 map 对象

map<stringint> myMap;

插入

使用成员函数进行插入

myMap.insert(make_pair("money"100));
myMap.insert(make_pair("holiday"200));

同时也可以直接用 [] 操作符

myMap["money"] = 100;

访问

可以直接使用myMap["money"]访问一个特定的元素。
也可以使用如下的iterator来进行遍历。

map<charint>::iterator it1;
for(it1=numberValues.begin(); it1!=numberValues.end(); ++it1){
   cout << it1->first << " => " << it1->second << '\n';
}


以上是关于C++容器map的key相同,如何合并对应的values的主要内容,如果未能解决你的问题,请参考以下文章

c++ map的key可以是map吗

使用例子解释C++中的map容器

java Map问题

C++哈希

C++哈希

C++哈希