我已按如下方式定义了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) {
}
}
但我想知道是否有更清晰的方法,不同的大小。
答案 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循环(如果使用正确)将适用于任何大小的容器,即使在嵌套的情况下也是如此。