我在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;
}
如上所述,我也认为你应该使用引用作为参数,而不是实际的向量。此外,如果知道向量的大小,你可以预先定义它。