如何在c ++中遍历unordered_map的unordered_map的unordered_map
Posted
技术标签:
【中文标题】如何在c ++中遍历unordered_map的unordered_map的unordered_map【英文标题】:how to traverse in a unordered_map of unordered_map of unordered_map in c++ 【发布时间】:2020-08-14 11:38:27 【问题描述】:我想遍历一个数据结构 - unordered_map
我知道同样可以通过 3d 数组完成,但是使用 3d 数组效率不高,因为数据范围很大,并且程序最终会使用比所需更多的空间。我尝试使用一些迭代器,如 unordered_map
【问题讨论】:
【参考方案1】:如果您不想使用迭代器,可以使用 foreach 循环遍历地图(它需要 C++11,我认为这不会有问题)。
myMap mapMapMap;
for(auto& mapMap : mapMapMap)
for(auto& map : mapMap.second)
for(auto& key_value : map.second)
int key = key_value.first;
int value = key_value.second;
// ....
另外,如果您不想迭代所有地图,而只想迭代第三级的值,首先给出两个,那么应该这样做:
int k1, k2;
for(auto& key_value : myMap.at(k1).at(k2))
//...
【讨论】:
顺便说一句,我不确定它是否有效(所以我没有在答案中包含这个)但也许你可以使用std::unordered_map<int[3], int>
,但我不确定它是否可以编译。跨度>
嗯,你在答案中提到的代码可以工作,但我不想使用 3 个循环。假设我想使用单个循环,因为某些值是已知的-(val1 和 val2)。我只想访问 mymap[val1][val2] 中的元素。这可以在一个循环中完成,所以很明显使用多循环只会增加复杂性
@PranavMehta 那么你可以做for(auto& key_value : myMap.get(val1).get(val2)) //...
。我将编辑我的答案以添加该内容以上是关于如何在c ++中遍历unordered_map的unordered_map的unordered_map的主要内容,如果未能解决你的问题,请参考以下文章