繁体   English   中英

在boost :: unordered_map中高效插入或更新

[英]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[] emplaceinsert这样的东西如果它已经存在就不会覆盖你的值,所以只需:

map[key] = newVal;

无论之前是否存在key ,都可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM