将重物插入 std::map
Inserting heavy objects into std::map
这段代码中 VeryHeavy(args...)
精确复制了多少次?
map.emplace(std::pair<VeryHeavyKey, VeryHeavy>(key, VeryHeavy(args...)));
或者,也许,使用 std::make_pair
更好?
复制对象是否有任何标准化的保证? std::map不复制的正确插入重物的方法是什么?
What's the right way to insert heavy object into std::map without copying?
C++17 之前
map.emplace(std::piecewise_construct,
std::forward_as_tuple(std::move(key)),
std::forward_as_tuple(args...));
post C++17
map.try_emplace(std::move(key), args...);
C++17 变体改进了前者,如果 key
已经存在,则不构造 VeryHeavy
。
这段代码中 VeryHeavy(args...)
精确复制了多少次?
map.emplace(std::pair<VeryHeavyKey, VeryHeavy>(key, VeryHeavy(args...)));
或者,也许,使用 std::make_pair
更好?
复制对象是否有任何标准化的保证? std::map不复制的正确插入重物的方法是什么?
What's the right way to insert heavy object into std::map without copying?
C++17 之前
map.emplace(std::piecewise_construct,
std::forward_as_tuple(std::move(key)),
std::forward_as_tuple(args...));
post C++17
map.try_emplace(std::move(key), args...);
C++17 变体改进了前者,如果 key
已经存在,则不构造 VeryHeavy
。