【发布时间】:2020-11-08 18:46:42
【问题描述】:
我认为这是一个标准问题,但我仍然无法找到解决方案或这个问题。我可能遗漏了一些非常基本的东西。
我要做的就是访问(只读)std::shared_ptr<std::map<int, int>> 中的数据。
我能找到的唯一方法是实际获取共享指针下的对象并将其用作普通对象:
shared_ptr<map<int, int>> tmap =
make_shared<const map<int,int>>(initializer_list<std::map<int,int>::value_type>{{1, 1}});
auto someMap = *(tmap.get());
cout << someMap[1];
虽然这可行,但如果可能,我更愿意将其用作 shared_ptr。
我能够找到与共享指针的“[]”运算符相关的SO question,但我再次不确定如何使用它。 为了完整起见,我也想知道如何修改这些数据。
TIA
编辑:从 shared_ptr 中删除了 const。请注意,我的重点是访问映射共享指针内部的数据,而不是它的 const 部分。
【问题讨论】:
-
std::map::operator[]是非常量,因此不能在const map对象上调用。如果你想在tmap指向的地图上调用它,从它的类型中去掉const,然后写(*tmap)[1] -
或者,考虑
tmap->at(1)- 如果在map中找不到密钥,at将抛出异常。 -
这能回答你的问题吗? C++ const map element access
-
auto someMap = *(tmap.get());制作了map的副本。为避免这种情况,请改用引用:const auto &someMap = ...。但就像其他人说的那样,operator[]不适用于const map,所以放弃const。
标签: c++ shared-ptr stdmap