0

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

要查找 Map 中是否存在密钥,我发现使用它

if ( map.count("key")>0) { // 得到密钥 }.

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

4

2 回答 2

0

为什么你不使用unordered_mapunordered_multimap来自 C++11 或使用它的boost对应物?

你也可以这样做:

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

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

于 2012-10-14T09:45:12.280 回答
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 
}
于 2018-10-10T16:14:57.173 回答