[英]Efficiently inserting or updating in boost::unordered_map
我有一个boost::unordered_map<std::string, std::string>
,每当我向地图中添加一个Key / Value对时,我想要旧的值是删除并替换为新值。 此外,由于我的编译器和库支持emplace()
,我想使用它(假设它可能会消除临时的构造)。
编程的最有效方法是什么? 我发现Boost doc在这里有点难以理解。
我的编译器是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
,否则你无论如何都应该更新您的编译器。 在旧的编译器上使用-std=c++0x
这样的摇摆平台没有任何意义。
如果您没有替换预先存在的条目, find
将不会返回有用的提示。
如果您要更换的项目,你可能也只是分配新值到现有的对象。
因此,提示仅在您实际要erase
旧对象并insert
新对象的情况下才有用。
我想你只想在这里使用operator[]
。 像emplace
和insert
这样的东西如果它已经存在就不会覆盖你的值,所以只需:
map[key] = newVal;
无论之前是否存在key
,都可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.