c++ - 在向 std::unordered_map 插入元素时避免不必要的构造函数调用?

标签 c++ c++11 stl

假设我有 std::unordered_map < int, std::vector< int > > my_hashtable 然后我插入一个新条目:

my_hashtable.insert(make_pair(a_key, std::vector()));

这可行,但它会多次调用构造函数和赋值操作。 (1) std::vector(), (2) make_pair 参数按值传递,复制 (3) make_pair 按值返回类型,再次复制 (4) 函数插入将再次复制。

如果我算错了请指正

因此,我们制作了太多拷贝,我们真的只应该调用一次构造函数,我们如何实现这一点(在 C++11 下)?

我注意到 std::unordered_map::insert 有一个使用移动构造函数的版本,但不确定如何使用它。

最佳答案

你可以查看std::unordered_map::emplace()的例子:

my_hashtable.emplace(
   std::piecewise_construct,
   std::forward_as_tuple(a_key),
   std::forward_as_tuple()
);

这里,没有不必要的构造函数调用。

关于c++ - 在向 std::unordered_map 插入元素时避免不必要的构造函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386866/

相关文章:

c++ - std::remove_if 是否保证按顺序调用谓词?

c++ - 使用 SFML 移动对象

c++ - 为什么我需要运行我的 makefile 两次来编译我的代码

c++ - 原始循环与依赖于索引的循环算法

C++11:将 time_point 增加一秒

c++ - std::optional::value_or() - 惰性参数评估

C++使用类从多维 vector 输出一个char数组

C++ 将 char 数组转换为 int 表示

c++ - 转发声明 : templates and inheritance

c++ - 隐式转换运算符