基本操作员具有非指针类型

base operator has non pointer type

本文关键字:指针 类型 操作员      更新时间:2023-10-16

我想在此处迭代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&(参考(。没有参考,您将创建副本
  • 尝试使用更好的命名约定来进行循环变量(即p1p2n(;根据您的上下文。
  • 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;
        }
    }
}

根据您的需求,您可以修改此内容。

相关文章: