迭代二维std :: unordered_map

时间:2016-08-20 09:18:13

标签: c++ unordered-map

我已按如下方式定义了2d地图:

unordered_map< string, unordered_map<string, Road*>* > matrix;

道路很简单:

class Road {
public:
    Road() : connected(0), weight(0) {}

    bool connected;
    int weight;
};

我已尝试以这种方式迭代地图,但无法编译。

    for (auto &i : matrix) {
        for (unordered_map< string, unordered_map<string, Road*>* >::iterator iter1 = i.second->begin();
             iter1 != i.second->end(); iter1++) {

        }
    }

因为我知道我的矩阵总是NxN,所以我能做的一件事是

    for (auto &i : matrix) {
        for (auto &j : matrix) {

        }
    }

但我想知道是否有更清晰的方法,不同的大小。

2 个答案:

答案 0 :(得分:1)

迭代地图和无序地图会产生键/值对。当你这样做

for (const auto& p : matrix)
    ...

变量p的类型为const std::pair<std::string, std::unordered_map<std::string, Road*>*>&。因此,要迭代内部地图,请执行以下操作:

for (const auto& p : matrix)
    for (const auto& q : *p.second) {
        Road *r = q.second;
        ...
    }

您可以使用p.first获取外部密钥,使用q.first获取内部密钥。

答案 1 :(得分:1)

容器的大小无关紧要。 range-for循环(如果使用正确)将适用于任何大小的容器,即使在嵌套的情况下也是如此。