C++中等价于Python字典列表的数据结构是什么?

4

我有一个Python字典列表,包含关于神经网络各个层的信息。每个字典可以有任意数量的条目,包括更多的字典。

layer_config = [
 {'conv_layer': {
     'filter_size' : 5,
     'stride' : 1,
     'num_filters' : 20}},
 {'pool_layer': {
     'poolsize' : (2,2)}},
 {'fc_layer': {
     'num_output' : 30}},
 {'final_layer': {
     'num_classes' : 10}}
]

我正在将程序转换为C ++,需要找到一种类似的方式来组织这些信息。 C ++嵌套映射是否是实现此目的的最佳方法,还是其他数据结构可能是更好的选择?


定义什么是“最佳”的。 - NathanOliver
1
你需要确定地图类型,从你的示例中并不清楚。 - Anon Mail
2
从你的例子中,甚至不清楚为什么它首先是一个列表——对我来说,它看起来应该只是一个单独的字典。 - UnholySheep
基于一个小例子很难推荐任何东西 - 这个结构是固定的还是可以有更多、更少或不同的层? - molbdnilo
在这种情况下,“最好”的意思是在插入/访问数据方面“最简单的”。 - nlhenderson17
请见:https://dev59.com/Fmsz5IYBdhLWcg3wlYwn - B. Szablak
2个回答

5
在C++中,为了解决这个问题并使用嵌套的映射,每个映射必须是相同类型的。如果您创建了一个映射的映射,子映射都必须保存相同类型的信息(如字符串和整数),而且您的字典根据键包含不同的信息(例如,您在键“poolsize”处有对(2,2)的一对,而其他地方则有整数)。在C++中处理这个问题的方法可能是创建一个结构体或类来保存这些信息。例如,您可以为conv_layer、pool_layer等创建一个包含四个映射的struct。从您的示例中可以看出,您的数据结构只需要一个conv_layer映射和许多其他变量的成对映射。如果是这种情况,您可以将以下内容用于数据结构:
struct layer_config{
        std::map<std::string, int> conv_layer;
        std::pair<std::string, std::pair<int, int>> pool_layer;
        std::pair<std::string, int> fc_layer;
        std::pair<std::string, int> final_layer;
};

3
你可以使用 C++ 的 map,它类似于 Python 的字典,以及 vector:
vector<map<string, map<string, int> > >neural_data;
map<string, map<string, int> >regular_data;
regular_data["conv_layer"]["filter_size"] = 5;
neural_data.push_back(regular_data);
cout << neural_data[0]["conv_layer"]["filter_size"]<< endl; 

你可以通过循环遍历并赋值其余的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接