c++中无序映射的高效笛卡儿乘积

问题描述 投票:1回答:1

我在python中使用itertools.product()来生成多个字典列表的乘积。

现在我试图在c++中实现基本的卡提斯乘积,但是生成乘积需要花费很多时间。请你给我一些建议,让它更有效率?谢谢你的建议。

vector<vector<unordered_map<string, string>>> iter_product(\
                vector<vector<unordered_map<string, string>>> &maps_list){

  vector<vector<unordered_map<string, string>>> out;
  for (auto map = maps_list[0].begin(); map != maps_list[0].end(); map++){
    out.push_back(vector<unordered_map<string, string>>({*map}));
  }
  if (maps_list.size() > 1){
    for (int i = 1; i < maps_list.size(); i++){
      vector<vector<unordered_map<string, string>>> new_out;
      for (int j = 0; j < out.size(); j++){
        for (int k = 0; k < maps_list[i].size(); k++){
          out[j].push_back(maps_list[i][k]);
          new_out.push_back(out[j]);
        }
      }
      out = new_out;
    }
  }
  return out;
}
c++ cartesian-product
1个回答
0
投票

如上所述,我也认为你应该使用引用作为参数,而不是实际的向量。此外,如果知道向量的大小,你可以预先定义它。

© www.soinside.com 2019 - 2024. All rights reserved.