如何修改multimap中的值?

3

我的问题是我创建了一个multimap。以下是部分代码。

        if(binary_search(final.begin() , final.end() , answer ) )
            {

            final[answer] =    

            }
            else
            {
                final.insert(pair<string,int>(answer , 1 ) );
            }

这里有一个字符串answer和一个<string,int>的multimap类型final。现在我的需求是,如果这个字符串answer已经存在,则将int值加1。我该怎么做呢?
如果字符串元素已经存在,我想将int值增加1。
谢谢。

1
如果string元素出现多次怎么办?您想递增所有值还是其中一个值? - Robᵩ
我确保它不会在地图中出现超过一次。 - InspiredCoder
2
为什么要使用multimap而不是map?在multimap中,相同的键可以重复,那么在这种情况下如何增加值呢? - Naveen
是的,@Naveen,map应该做得很好。 - InspiredCoder
2个回答

4
如果你希望键是唯一的,那么请使用map。然后你可以简单地执行final[answer]++。请注意,如果map::operator[]中不存在该键,则会将其插入到map中。在此插入期间,值将被默认构造,并返回对该默认构造值的引用。如果键已经存在,则返回对值元素的引用。

哦,是的 :) 现在我该如何在地图中搜索呢? - InspiredCoder
++final[answer] 是首选的递增方法,除非你特别需要预先递增的值。 - Chris
@InspiredCoder:使用map::find - Naveen
1
@InspiredCoder - 如果你只是在你的问题中进行了一次搜索,那么你根本不需要搜索。你可以用一个简单的++final[answer]替换问题中的所有代码。如果条目已经存在,它将被递增。如果该条目不存在,则会创建一个值为0的条目,并递增。不需要显式搜索。 - Robᵩ

1

如果键是唯一的,请使用std::map

如果您需要一个multimap(即您需要具有相同键的多个条目),请使用std::lower_bound

multimap::iterator it = mmap.lower_bound(key);
while (it != mmap.end() && it->first == key)
{
   // *it is a key-value pair, where you can modify the value
   it->second.Modify();
   ++it;
}

 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接