【问题标题】:C++ Equivalent of Python List of Dictionaries?Python 字典列表的 C++ 等价物?
【发布时间】:2017-10-14 17:15:26
【问题描述】:

我有一个 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++ 嵌套映射是实现这一目标的最佳方式,还是有其他数据结构可能是更好的选择?

【问题讨论】:

  • 定义什么是“最好的”。
  • 您必须确定地图类型。从您的示例中不清楚。
  • 从您的示例中,甚至不清楚为什么首先这是一个列表 - 对我来说,它看起来应该只是一个字典
  • 很难基于一个小例子来推荐任何东西——结构是固定的还是可以有更多或更少或不同的层?
  • 在这种情况下,“最好”在插入/访问数据方面是“最简单的”

标签: python c++ list dictionary


【解决方案1】:

在 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;
};

【讨论】:

    【解决方案2】:

    你可以使用一个类似于python字典的c++ map和一个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; 
    

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

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 2012-08-27
      • 1970-01-01
      • 2016-07-21
      • 2016-01-10
      • 2021-07-17
      • 1970-01-01
      • 2020-05-12
      • 2016-07-04
      相关资源
      最近更新 更多