测试所有组合(c++)

测试所有组合(c++),c++,combinations,C++,Combinations,我认为这是一个经典的问题,但我没有找到一个适合我的问题的答案。 我有两个“MyObject”的向量,我想遍历第一个向量和第二个向量元素的所有可能组合,并分别处理所有情况。第二个向量可能比第一个向量包含更多的元素。 以下是我目前正在做的工作的伪代码: select_assignement(vector1, vector2, assignement){ vector1_memory = copy(vector1); vector2_memomry = copy(vector2);

我认为这是一个经典的问题,但我没有找到一个适合我的问题的答案。 我有两个“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]

事实上,我认为使用next_置换更好,正如你所说:

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()));
}

在我看来,它做的事情和以前完全一样,但要简单得多。

为你做一个普通的双人舞有什么不对?为什么要递归?一个双for循环会给出vector1的一个元素和vector2的一个元素之间的所有组合,但不是vector1的整个元素集和vector2的整个元素集的所有组合。或者我设计了这个poorlyDo你是说连接vec1和vec2,然后洗牌得到的vec3?或者洗牌然后连接?我很难理解你的目标。我的意思是,如果有两个列表[a,b,c]和[1,2,3,4],我不想作为输出:{[a1],[a2],…[c3],[c4]}但是{[a1,b2,c3],[a1,b2,c4],[a4,b3,c2]}你能用两个简单的向量为你的问题添加一个简单的例子吗?例如三和二元素?这里唯一的一点是,如果vector2.size>vector1.size,当我得到赋值范围之外的置换时,我会得到几次相同的组合。。。但在我的场景中,这不是一个问题。我的测试表明,它似乎比第一种递归方式快得多。