C++ 多个地图内部地图
C++ Multiple Maps Inside Map
在 python 中,我可以像这样在字典中包含字典:
dict = { 'a': { 1:1, 2:2, 3:3 },
'b': { 1:1, 2:2, 3:3 },
'c': { 1:1, 2:2, 3:3 } }
在 C++ 中,我必须在另一个映射中使用一个映射:
std::map< std::string, std::map<int, int> > map1
但是如何实现与 python 示例相同的结构?还没能找到这方面的任何例子。
std::map< std::string, std::map<int, int, int> > ??
std::map<std::string, std::map<int, int>, std::map<int, int>, std::map<int, int> > ??
如果你的意思是地图对象的初始化那么它可能看起来像
#include <iostream>
#include <string>
#include <map>
int main()
{
std::map< std::string, std::map<int, int> > m =
{
{ "a", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
{ "b", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
{ "c", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
};
for ( const auto &p1 : m )
{
std::cout << p1.first << ": ";
for ( const auto &p2 : p1.second )
{
std::cout << "{ " << p2.first << ", " << p2.second << " } ";
}
std::cout << '\n';
}
return 0;
}
程序输出为
a: { 1, 1 } { 2, 2 } { 3, 3 }
b: { 1, 1 } { 2, 2 } { 3, 3 }
c: { 1, 1 } { 2, 2 } { 3, 3 }
将密钥对放入映射的语法在 C++ 中与在 Python 中不同。在 C++ 中,std::map
容器公开了 emplace(key, value)
方法以执行类似 dict[key] = value
的操作。它也略有不同,因为 C++ 是强类型的,您必须为键和值提供正确的类型(如模板中所定义)
要用 std::map
执行与 python 代码相同的操作,您可以这样做:
std::map<std::string, std::map<int, int> dict
std::map<int, int> my_map;
my_map.emplace(1, 0); // Add a key of 1 with a value of 0 to the map
dict.emplace("My key", my_map); // Add the map to the other map with a key of "My map"
在 python 中,我可以像这样在字典中包含字典:
dict = { 'a': { 1:1, 2:2, 3:3 },
'b': { 1:1, 2:2, 3:3 },
'c': { 1:1, 2:2, 3:3 } }
在 C++ 中,我必须在另一个映射中使用一个映射:
std::map< std::string, std::map<int, int> > map1
但是如何实现与 python 示例相同的结构?还没能找到这方面的任何例子。
std::map< std::string, std::map<int, int, int> > ??
std::map<std::string, std::map<int, int>, std::map<int, int>, std::map<int, int> > ??
如果你的意思是地图对象的初始化那么它可能看起来像
#include <iostream>
#include <string>
#include <map>
int main()
{
std::map< std::string, std::map<int, int> > m =
{
{ "a", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
{ "b", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
{ "c", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
};
for ( const auto &p1 : m )
{
std::cout << p1.first << ": ";
for ( const auto &p2 : p1.second )
{
std::cout << "{ " << p2.first << ", " << p2.second << " } ";
}
std::cout << '\n';
}
return 0;
}
程序输出为
a: { 1, 1 } { 2, 2 } { 3, 3 }
b: { 1, 1 } { 2, 2 } { 3, 3 }
c: { 1, 1 } { 2, 2 } { 3, 3 }
将密钥对放入映射的语法在 C++ 中与在 Python 中不同。在 C++ 中,std::map
容器公开了 emplace(key, value)
方法以执行类似 dict[key] = value
的操作。它也略有不同,因为 C++ 是强类型的,您必须为键和值提供正确的类型(如模板中所定义)
要用 std::map
执行与 python 代码相同的操作,您可以这样做:
std::map<std::string, std::map<int, int> dict
std::map<int, int> my_map;
my_map.emplace(1, 0); // Add a key of 1 with a value of 0 to the map
dict.emplace("My key", my_map); // Add the map to the other map with a key of "My map"