我看到这里存在一个非常接近的Q / A:Iterating over a container of unique_ptr's 但是,当涉及到map的迭代时,我看不到如何避免对unique_ptr进行复制/分配。
当我迭代地图时(例如,为了简单起见,使用c ++ 17),假设x是Foo的int类型的公共成员变量:
map<string, unique_ptr<Foo> > my_map;
for (auto const& [key, val] : my_map) {
val->x = 1;
}
我得到了错误:
constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = std::unique_ptr<Foo>]’ is implicitly deleted because the default definition would be ill-formed:
我确实看到另一则帖子(Cannot iterate over map whose elements hold a uniq_ptr)在做
:map<string, wrapper_struct > my_map;
其中wrapper_struct是内部带有unique_ptr的结构。我的问题是:有没有更简单的解决方案?
答案 0 :(得分:0)
您可以对迭代器本身使用const引用,而不要使用对中的元素。
for (const auto& it : my_map) {
auto ptr_to_unique_foo = it.second.get();
}