C ++等效的Python词典列表?

时间:2017-05-15 19:46:31

标签: python c++ list dictionary

我有一个字典的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 ++嵌套映射是实现此目的的最佳方式,还是有另一种数据结构可能是更好的替代方案?

2 个答案:

答案 0 :(得分:4)

在C ++中,要为此问题使用嵌套映射,每个映射必须属于同一类型。如果你创建了一个地图地图,那么这些子图都必须保存相同类型的信息(比如字符串和整数),看起来你的字典中有不同的信息,这取决于密钥,(即你有一个在密钥“poolsize”处对(2,2),在其他地方你有整数)。 C ++的方法可能是创建一个保存此信息的结构或类。例如,您可以为conv_layer,pool_layer等创建一个包含四个映射的结构。从您的示例来看,您的数据结构看起来只需要一个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;
};

答案 1 :(得分:2)

您可以使用类似于python字典的c ++地图和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; 

然后,您可以循环并分配其余数据