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