在c ++哈希映射中将现有密钥的值添加到新密钥

时间:2012-10-14 09:30:48

标签: c++ hashmap key

我希望仅使用整数键在C ++中的哈希映射中插入整数数据。我的原始数据将重复许多键。如果密钥不存在,我希望在map中插入一个值。但是,如果密钥存在,则应添加旧数据和我希望添加的新数据(c = key1的旧值+ key1的新值; c应插入key1)。目前它被覆盖了。

要查找地图中是否存在密钥,我发现使用此

if(map.count(“key”)> 0)  {//得到了密钥}。

但是如果我必须在每次插入之前进行检查,那么只会增加插入到n ^ 2的复杂性。有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

为什么不使用C ++ 11中的unordered_mapunordered_multimap或使用其boost对应文件?

你也可以这样做:

auto i = map.find( "key" );
if( i == map.end() ) {insert into map}
i->second = new value;

如果地图中已存在值,则使用此技术,您无需检查。并根据map(或甚至unordered_mapmap["key"]将创建项目,如果它不存在并默认初始化它!

答案 1 :(得分:0)

Lets say, you have a *map named* `m`, with **integer** `b` as value and `s` (can be of any data type, doesn't matter) as **key**, then you can use following snippet(C++):

auto i=m.find(s);              // iterator for map
if(i==m.end())             // element not found, if iterator reaches at end
    m.insert(make_pair(s,b));  // element inserted as new pair
else
{
    cin>>p;
    i->second+=p;          // accessing 'value' for given key and 
                           // incrementing it by p 
}