我希望仅使用整数键在C ++中的哈希映射中插入整数数据。我的原始数据将重复许多键。如果密钥不存在,我希望在map中插入一个值。但是,如果密钥存在,则应添加旧数据和我希望添加的新数据(c = key1的旧值+ key1的新值; c应插入key1)。目前它被覆盖了。
要查找地图中是否存在密钥,我发现使用此
if(map.count(“key”)> 0) {//得到了密钥}。
但是如果我必须在每次插入之前进行检查,那么只会增加插入到n ^ 2的复杂性。有更好的方法吗?
答案 0 :(得分:0)
为什么不使用C ++ 11中的unordered_map
或unordered_multimap
或使用其boost
对应文件?
你也可以这样做:
auto i = map.find( "key" );
if( i == map.end() ) {insert into map}
i->second = new value;
如果地图中已存在值,则使用此技术,您无需检查。并根据map
(或甚至unordered_map
)map["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
}