迭代二维std::unordered_map

Iterating through a two dimensional std::unordered_map

本文关键字:unordered map std 二维 迭代      更新时间:2023-10-16

我定义了一个2d地图,如下所示:

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

其中road简单:

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

但是我想知道是否有一种更干净的方法来改变大小。

遍历映射和无序映射产生键/值对。当你做

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循环(如果使用正确)将适用于任何大小的容器,甚至在您的嵌套情况下。