c++ 获取 unordered_map 向量的 unordered_map 的值
c++ get values of an unordered_map of vector of unordered_map
我有一个 C++ 程序,其中有一个 unordered_map
(unmap_graph),其值 (vector_id_as2) 中有一个 vector
,而这个 vector
是另一个 unordered_map
(unmap_id_as2),它的值是 vector
int。请看下面的 C++ 代码:
typedef unordered_map<int, std::vector<int>> unmap_id_as2;
typedef vector<unmap_id_as2> vector_id_as2;
typedef unordered_map<int, vector_id_as2> unmap_graph;
unmap_id_as2 map2_1;
map2_1[67031]={1,432414};
unmap_id_as2 map2_2;
map2_2[67030]={2,432413};
unmap_id_as2 map2_3;
map2_3[67053]={2,432444};
unmap_id_as2 map2_4;
map2_4[67053]={3,432445};
vector_id_as2 vetor_id_as2 = {map2_1, map2_2, map2_3, map2_4};
unmap_graph map1;
map1[67029] = vetor_id_as2;
cout << "***********: 432414 - " << map1[67029][0][67031][1] << endl;
cout << "***********: 2 - " << map1[67029][1][67030][0] << endl;
cout << "***********: 432413 - " << map1[67029][1][67030][1] << endl;
cout << "***********: 3 - " << map1[67029][3][67053][0] << endl;
我的问题是:如何在 map1 中循环以获取映射 (unmap_id_as2
) 键和值?例如,在 cout << "***********: 432414 - " << map1[67029][0][67031][1] << endl;
命令中,a 得到结果 432414。但是我通知所有 map1 参数 ([67029][0][67031][1]) 去做。所以我想知道如何在 map1 中循环以获取其所有值(这是另一个 unordered_map 的向量)?
爱默生
您可以在 C++ 中使用 Ranged-based-loops 遍历映射
std::unordered_map<int,std::string> names{
{1,"John"},
{3,"Geoff"},
{2,"Parekh"},
};
//Iterating through the map
for (auto [key,value] : names)
{
std::cout << key << " : " << value << '\n';
}
输出:
2 : Parekh
3 : Geoff
1 : John
如果你想遍历嵌套的地图,其中一个的值是另一个地图,你也需要嵌套循环。
for (auto [key,value] : names)
{
//value is now the vector of un_ordered map
for( auto map : value){
for (auto [key2,value2] : map)
{
/// .....
}
}
}
这是您浏览容器中每张地图的唯一方法,我建议您重新考虑您的容器选择,因为这将是 highly in-efficient。
你有
typedef unordered_map<int, std::vector<int>> unmap_id_as2;
typedef vector<unmap_id_as2> vector_id_as2;
typedef unordered_map<int, vector_id_as2> unmap_graph;
所以循环 unmap_graph
以相反的顺序发生:
for (auto& [my_int, my_vector_id_as2] : map1)
for (auto& my_unmap_id_as2 : my_vector_id_as2)
for (auto& [my_inner_int, my_vector_ints] : my_unmap_id_as2)
{
std::cout << my_inner_int << ":";
for (int my_innermost_int : my_vector_ints)
std::cout << " " << my_innermost_int;
std::cout << '\n';
}
(如果不需要 mutate/change 数据,请考虑使用 const auto&
)。
我有一个 C++ 程序,其中有一个 unordered_map
(unmap_graph),其值 (vector_id_as2) 中有一个 vector
,而这个 vector
是另一个 unordered_map
(unmap_id_as2),它的值是 vector
int。请看下面的 C++ 代码:
typedef unordered_map<int, std::vector<int>> unmap_id_as2;
typedef vector<unmap_id_as2> vector_id_as2;
typedef unordered_map<int, vector_id_as2> unmap_graph;
unmap_id_as2 map2_1;
map2_1[67031]={1,432414};
unmap_id_as2 map2_2;
map2_2[67030]={2,432413};
unmap_id_as2 map2_3;
map2_3[67053]={2,432444};
unmap_id_as2 map2_4;
map2_4[67053]={3,432445};
vector_id_as2 vetor_id_as2 = {map2_1, map2_2, map2_3, map2_4};
unmap_graph map1;
map1[67029] = vetor_id_as2;
cout << "***********: 432414 - " << map1[67029][0][67031][1] << endl;
cout << "***********: 2 - " << map1[67029][1][67030][0] << endl;
cout << "***********: 432413 - " << map1[67029][1][67030][1] << endl;
cout << "***********: 3 - " << map1[67029][3][67053][0] << endl;
我的问题是:如何在 map1 中循环以获取映射 (unmap_id_as2
) 键和值?例如,在 cout << "***********: 432414 - " << map1[67029][0][67031][1] << endl;
命令中,a 得到结果 432414。但是我通知所有 map1 参数 ([67029][0][67031][1]) 去做。所以我想知道如何在 map1 中循环以获取其所有值(这是另一个 unordered_map 的向量)?
爱默生
您可以在 C++ 中使用 Ranged-based-loops 遍历映射
std::unordered_map<int,std::string> names{
{1,"John"},
{3,"Geoff"},
{2,"Parekh"},
};
//Iterating through the map
for (auto [key,value] : names)
{
std::cout << key << " : " << value << '\n';
}
输出:
2 : Parekh
3 : Geoff
1 : John
如果你想遍历嵌套的地图,其中一个的值是另一个地图,你也需要嵌套循环。
for (auto [key,value] : names)
{
//value is now the vector of un_ordered map
for( auto map : value){
for (auto [key2,value2] : map)
{
/// .....
}
}
}
这是您浏览容器中每张地图的唯一方法,我建议您重新考虑您的容器选择,因为这将是 highly in-efficient。
你有
typedef unordered_map<int, std::vector<int>> unmap_id_as2;
typedef vector<unmap_id_as2> vector_id_as2;
typedef unordered_map<int, vector_id_as2> unmap_graph;
所以循环 unmap_graph
以相反的顺序发生:
for (auto& [my_int, my_vector_id_as2] : map1)
for (auto& my_unmap_id_as2 : my_vector_id_as2)
for (auto& [my_inner_int, my_vector_ints] : my_unmap_id_as2)
{
std::cout << my_inner_int << ":";
for (int my_innermost_int : my_vector_ints)
std::cout << " " << my_innermost_int;
std::cout << '\n';
}
(如果不需要 mutate/change 数据,请考虑使用 const auto&
)。