c++ - 如何将元素插入到 std::map 的共享指针中?
问题描述
我可以像这样插入地图:
std::map<int, int> testMap;
testMap.insert(std::make_pair(0, 1));
但是,如果我用这样的共享指针包围地图:
std::shared_ptr<std::map<int, int>> testSharedMap;
testSharedMap->insert(std::make_pair(0, 1));
它不起作用。我收到运行时错误。
Exception thrown: read access violation.
_Scary was nullptr. occurred
std::map
当它被包围时我该如何使用std::shared_ptr
?
解决方案
正如评论中提到的@CruzJean,您需要先分配内存,然后再使用 取消引用std::shared_ptr::operator->
,否则(来自cppreference.com)。
如果存储的指针为 nul l ,则行为未定义。
例如,您可以执行以下操作:
#include <iostream>
#include <map>
#include <memory>
int main()
{
// convenience type(alias)
using Map = std::map<int, int>;
std::shared_ptr<Map> testSharedMap = std::make_shared<Map>();
// now you can access the valid memory
testSharedMap->insert(std::make_pair(0, 1));
testSharedMap->emplace(1, 1); // or using `std::map::emplace`
// print the element in the Map by dereferencing the pointer
for (const auto [key, value] : *testSharedMap)
std::cout << key << " " << value << "\n";
return 0;
}
推荐阅读
- c# - 如何使用 AspNetCoreModuleV2 设置 VS 2017?
- javascript - 我正在尝试创建一个机器人,我希望我的所有消息都包含在 JS 中的同一个 div 中
- php - 如何检查从时间戳过去了多少天 - 计算午夜的天数
- docker - 可以从主机访问 docker 容器,但这应该是不可能的?
- google-app-engine - 使用 appcfg.py 下载 App Engine 源代码时出错
- javascript - 如何使用 React Spring 更改图标?
- android - 在客户端代码中使用 FCM 服务器密钥的替代方法是什么?
- python - 获取python列表中下一个非零值的索引
- search - Android Room 中是否有任何查询可以提前搜索?
- reactjs - 使用 package.json 上的本地路径使用 react ui 项目 - 出现错误错误:无效的钩子调用