首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试全组合(c++)

测试全组合(c++)
EN

Stack Overflow用户
提问于 2015-05-04 14:45:31
回答 1查看 153关注 0票数 0

我认为这是一个经典的问题,但我没有找到一个适合我的问题的答案。我有两个'MyObject‘向量,我想迭代第一个向量的元素和第二个向量的元素的所有可能组合,并分别处理所有的情况。(第二个向量可能比第一个矢量有更多的元素)。下面是我当前所做工作的伪代码

代码语言:javascript
复制
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]是:

代码语言:javascript
复制
assignement : [a1,b2,c3]
assignement : [a1,b2,c4]
 ... 
assignement : [a4,b3,c2]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 08:01:02

实际上,我认为使用next_permutation要好得多,正如您所说的:

代码语言:javascript
复制
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()));
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30033065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档