c++ - 将重物插入 std::map
问题描述
VeryHeavy(args...)
在这段代码中准确复制了多少次?
map.emplace(std::pair<VeryHeavyKey, VeryHeavy>(key, VeryHeavy(args...)));
或者,也许,有更好的使用std::make_pair
?复制对象是否有任何标准化的保证?将重物插入 std::map 而不复制的正确方法是什么?
解决方案
将重物插入 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...);
VeryHeavy
C++17 变体通过不构造if key
is already present对前者进行了改进。
推荐阅读
- r - LPA - 基于 BIC 的模型选择,具有函数prior=priorControl()
- docker - 通过 SSH 运行 docker 时出现“输入设备不是 TTY”错误
- go - 导入本地包的最佳方法是什么?
- codenameone - 隐藏的推送通知在 Android 上不起作用
- networking - 在 Fedora 中使用 nmcli 设置网络设备优先级
- reactjs - 材质界面
导致样式崩溃,初始隐藏组件(抽屉,菜单项...)#SSR #25293 - swift - 如何在 SwiftUI 中的 View 之外制作状态包装器?
- azure - 使用 terraform 订购 Azure 应用服务证书
- php - 使用 php 触发 Elementor 弹出窗口
- c# - 如何在活动报表中插入或替换多行文本 15 RichTextBox