首页 > 解决方案 > 将重物插入 std::map

问题描述

VeryHeavy(args...)在这段代码中准确复制了多少次?

map.emplace(std::pair<VeryHeavyKey, VeryHeavy>(key, VeryHeavy(args...)));

或者,也许,有更好的使用std::make_pair?复制对象是否有任何标准化的保证?将重物插入 std::map 而不复制的正确方法是什么?

标签: c++performancecontainersstdmapc++-standard-library

解决方案


将重物插入 std::map 而不复制的正确方法是什么?

在 C++17 之前

map.emplace(std::piecewise_construct,
              std::forward_as_tuple(std::move(key)),
              std::forward_as_tuple(args...));

发布 C++17

map.try_emplace(std::move(key), args...);

VeryHeavyC++17 变体通过不构造if keyis already present对前者进行了改进。


推荐阅读