迭代二维std::unordered_map
Iterating through a two dimensional std::unordered_map
我定义了一个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循环(如果使用正确)将适用于任何大小的容器,甚至在您的嵌套情况下。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶