在Java的hashmap中:
map.put(key, new_value)
将使用new_value更新key = key的条目(如果它存在于hashmap中。
)在C ++ 11的unordered_map中执行类似操作的正确方法是什么?
我还没有找到像updateXXX这样的API,并且文档说 unordered_map :: insert 函数只有在没有任何这样的密钥对时才会成功。
答案 0 :(得分:28)
如果您知道密钥在地图中,则可以使用operator[]
返回对映射值的引用。因此它将是map[key] = new_value
。但请注意,如果地图中尚不存在该键,则会插入(key, new_value)
。
您还可以使用find
返回值的迭代器:
auto it = map.find(key)
if(it != map.end())
it->second = new_value;
答案 1 :(得分:0)
我认为Java map.put
插入了元素(如果它已经不在地图中)并在地图中更新了它,请参阅 put :
放入
公共V放(K键,V值)
将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。
这相当于unordered_map::operator[]:
如果k匹配容器中元素的键,则该函数返回对其映射值的引用。
如果k与容器中任何元素的键不匹配,则该函数将使用该键插入一个新元素,并返回对其映射值的引用。请注意,即使没有为元素指定映射值(使用其默认构造函数构造元素),这也总是会将容器大小增加1。
答案 2 :(得分:0)
如果类型value
没有默认构造函数,则可以使用:
map.emplace(key, new_value).first->second = new_value;
这还具有emplace与[]运算符和insert的所有其他优点。
答案 3 :(得分:0)
if(map.count(key)){
map[key] = value;
}