我想在此处迭代map<int,map<int,set<int>>> mep;
获取错误(" ->"的基本运算符,没有指针类型(以这种方式
for(auto p : mep){
vector<int> temp;
auto s = p->second->second;//getting here here
for(auto it : s){
temp.push_back(it);
}
result.push_back(temp);
}
您有三个嵌套容器。您应该期望有三个嵌套 for-loops :
std::vector<int> temp;
for (const auto& p1 : mep) {
for (const auto& p2 : p1.second) {
for (const int n : p2.second) {
temp.push_back(n);
}
}
}
注释:
- 在循环中使用
const auto&
(参考(。没有参考,您将创建副本。 - 尝试使用更好的命名约定来进行循环变量(即
p1
,p2
,n
(;根据您的上下文。 -
using namespace std;
被认为是不良习惯。推理在这里解释。
for(auto p : mep){
vector<int> temp;
auto s = p->second;
for(auto k : s){
auto ss = k->second;
for(auto it : ss)
temp.push_back(it);
}
result.push_back(temp);
}
p->第二个给您地图对象而不是迭代对象,因此没有 -> seconed,您有一个地图对象,需要在此映射对象上拥有新的迭代器
以下是相同的代码,该代码设置并打印为地图数据结构的设置值,
set<int> sv = { 1,2,3,4,5};
map<int, set<int>> ms = {{2,sv}, {1,sv}};
map<int, map<int,set<int>>> mep = {{1,ms}};
for (auto i:mep) { // Outer map iteration
for (auto j:i.second) { // Inner map iteration
for (auto s:j.second) { // Set iteration
cout<<"Set:"<< s;
}
}
}
根据您的需求,您可以修改此内容。