假设我有 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/