在提升::unordered_map中有效地插入或更新
Efficiently inserting or updating in boost::unordered_map
我有一个boost::unordered_map<std::string, std::string>
,每当我向映射中添加一个键/值对时,如果映射中已经存在以前的键,我希望删除旧值并替换为新值。 另外,由于我的编译器和库支持 emplace()
,我想使用它(假设它可以消除临时的构造)。
编程最有效的方法是什么? 我发现 Boost 文档在这里有点难以理解。
我的编译器是 g++ 4.4.7 带有-std=g++0x
使用可选的插入点提示(通过首先调用find()
获得):
iterator insert(const_iterator hint, const value_type& obj);
在 emplace
的情况下,它不是同名重载:
template <class... Args> iterator emplace_hint(const_iterator position, Args&&... args);
我从 C++14 草案标准中获得了这些签名,因为这是我手边的东西,但如果它有emplace
,它们应该可以追溯到 Boost,否则无论如何你都应该更新你的编译器。在旧编译器上使用像 Boost 这样不稳定的平台是没有意义的 -std=c++0x
。
警告
如果不替换预先存在的条目,find
将不会返回有用的提示。
如果要替换条目,不妨将新值分配给现有对象。
因此,该提示仅在您实际想要erase
旧对象并insert
新对象的情况下才有用。
我想你只是想在这里使用operator[]
。像 emplace
和 insert
这样的东西不会覆盖你的值,如果它已经存在,所以只需:
map[key] = newVal;
无论key
以前是否存在于地图中都可以工作。
相关文章:
- 有效地使用std::unordered_map来插入或增加键的值
- 如何有效地在 std::vector 中插入一对?
- 有效地计算多维数组的累积和?
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 有效地将大数存储为 2 的幂用于路径问题
- 有效地将列/行插入到就地存储在行/列主向量的矩阵中
- 有效地测试 QSet 是否包含元素,如果不存在,则插入
- 有效地将值插入地图.更好地增加或减少键
- C++ std::map 或 std::set - 有效地插入重复项
- 在提升::unordered_map中有效地插入或更新
- 如果没有重复,则可以有效地将整数插入到不断增长的数组中
- 有效地遍历映射,同时插入其他线程
- Cuda有效地将数据插入到未排序的填充数组中
- 如何普遍有效地填充缓冲液?(传递插入迭代器?器皿?等)
- 如何有效地将一系列项目插入中间的 std::d eque 中,带有 C++03
- 如何在地图中有效地插入元素
- 如何有效地将一系列连续整数插入std::集中
- 有效地向字符串追加或插入可变数量的空格
- 列表如何知道要在哪里(有效地)插入,而又不能进行随机访问?
- 如何更有效地插入到std::map中