基本运算符具有非指针类型

时间:2019-07-02 10:35:13

标签: c++

我想遍历这里的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);
}

3 个答案:

答案 0 :(得分:1)

您有三个嵌套容器。您应该期望有三个嵌套的 for循环

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;被认为是坏习惯。解释here进行解释。

答案 1 :(得分:0)

NAMESPACE       NAME                              READY   STATUS              RESTARTS   AGE
kube-system     coredns-fb8b8dccf-h5hhk           0/1     ContainerCreating   1          20h
kube-system     coredns-fb8b8dccf-jblmv           0/1     ContainerCreating   1          20h
kube-system     etcd-ubuntu6                      1/1     Running             0          19h
kube-system     kube-apiserver-ubuntu6            1/1     Running             0          76m
kube-system     kube-controller-manager-ubuntu6   0/1     CrashLoopBackOff    7          75m
kube-system     kube-flannel-ds-amd64-4pqq6       1/1     Running             0          20h
kube-system     kube-flannel-ds-amd64-dvfmp       0/1     CrashLoopBackOff    7          20h
kube-system     kube-flannel-ds-amd64-dz9st       1/1     Terminating         0          20h
kube-system     kube-proxy-9vfjx                  1/1     Running             0          20h
kube-system     kube-proxy-q5c86                  1/1     Running             0          20h
kube-system     kube-proxy-zlw4v                  1/1     Running             0          20h
kube-system     kube-scheduler-ubuntu6            1/1     Running             0          76m
nginx-ingress   nginx-ingress-6957586bf6-fg2tt    0/1     Terminating         22         19h

p->第二秒钟为您提供了地图对象,而不是迭代器对象,因此没有->第二,您有一个地图对象,需要在此地图对象上拥有新的迭代器

答案 2 :(得分:0)

下面是与设置和打印地图数据结构的set值相同的代码,

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;
        }
    }
}

您可以根据需要进行修改。