我认为这是一个经典的问题,但我没有找到一个适合我的问题的答案。我有两个'MyObject‘向量,我想迭代第一个向量的元素和第二个向量的元素的所有可能组合,并分别处理所有的情况。(第二个向量可能比第一个矢量有更多的元素)。下面是我当前所做工作的伪代码:
select_assignement(vector1, vector2, assignement){
vector1_memory = copy(vector1);
vector2_memomry = copy(vector2);
foreach(element1 in vector1){
foreach(element2 in vector2){
assignement[element1] = element2;
vector1_memory.remove(element1);
vector2_memory.remove(element2);
if(vector1_memory.size()>0)
select_assignement(vector1_memory, vector2_memory, assignement);
else
print_assignment(assignment); // Here I finally get one possible assignement
}
}
}在这里,我假设vector1较小或等于vector2。因此,我在两个向量之间分配每一对'MyObject‘,如果还剩下一些元素,我再次递归地执行它。我的问题是我必须复制每个递归的向量,因为我不能删除向量循环中的对象.我的问题是:这是正确的方法,还是我完全疯了?
谢谢你的帮忙
编辑:两个列表的输出[a,b,c]和[1,2,3,4]是:
assignement : [a1,b2,c3]
assignement : [a1,b2,c4]
...
assignement : [a4,b3,c2]发布于 2015-05-05 08:01:02
实际上,我认为使用next_permutation要好得多,正如您所说的:
void Part::select_assignement(std::vector<MyObject> & vector1, std::vector<MyObject> & vector2 ){
std::map<MyObject,MyObject> assignement;
do {
j++;
assignement.clear();
for (size_t i = 0; i < vector1.size(); ++i)
assignement[vector1[i]] = vector2[i];
treat_this_case(assignement);
}while(std::next_permutation(vector2.begin(), vector2.end()));
}在我看来,它所做的事情和以前完全一样,但以一种简单得多的方式。
https://stackoverflow.com/questions/30033065
复制相似问题