遍历二维 std::unordered_map

Iterating through a two dimensional std::unordered_map

我定义了一个二维地图如下:

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) {

        }
    }

但我想知道是否有更简洁的不同大小的方法。

迭代映射和无序映射产生 key/value 对。当你这样做时

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获取内键

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