c++ - 将重物插入 std::map

标签 c++ performance containers stdmap c++-standard-library

这段代码中的 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...));

C++17 后

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

C++17 变体对前者进行了改进,如果 key 已经存在,则不构造 VeryHeavy

关于c++ - 将重物插入 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62751463/

相关文章:

c++ - 仅在具有零参数模板的头文件中定义 C++ 全局函数?

c++ - 带有返回值的 if 语句代码样式

c++ - 如何在 C++ 中优化输入/输出

c++ - 为什么 C++ STL 中的算法、迭代器和容器是分离的

css - 如何通过CSS在/div容器中添加填充空间?

c++ - 如何将 "pull"数据从c++转qml?

c++ - 写入文件,读取时分隔值

json - 尝试减少 JSON 大小是否值得?

ios - Swift 字典荒谬的内存使用

docker - 如何在启动时在 docker 容器中启动服务