矢量值的不同组合

时间:2012-04-26 10:01:40

标签: c++ vector superset

假设我有一个n值的向量,我想得到它的值的不同组合,例如:如果我有vect = [a,b,c]我想要的不同组合是:[a,b ,c],[a,b],[a,c],[b,c],[a],[b],[c]

请注意,例如[a,b]与[b,a]相同,所以我不需要同时保留它们。

3 个答案:

答案 0 :(得分:6)

0计算到2^vector.size() - 1。如果循环变量的第i位为1,则在组合中包含vector[i]

vector<char> v;
v.push_back('a');
v.push_back('b');
v.push_back('c');
for (int counter = 0; counter < (1 << v.size()); ++counter)
{
    vector<char> combination;
    for (int i = 0; i < v.size(); ++i)
    {
        if (counter & (1 << i))
            combination.push_back(v[i]);
    }

    // do something with combination
}

编辑:如果要排除空集,请从1开始计数。

答案 1 :(得分:0)

给你一个伪代码,请把它转换为实际代码。

vector resultVec;
while (!inputVec.empty)
{
    char c = inputVec.pop_back();

    foreach(one in resultVec)
    {
         combined = combine c and one;
         resultVec.push_back(combined);
    }

    resultVec.push_back(c);
}

答案 2 :(得分:0)

想象一下,你有一个功能,可以为你做这个。我们称之为combinations

如果你要实现自己的版本my_combinations,你可以通过查看向量中的第一个元素,在向量的其余部分调用combinations,然后将您的元素与每个组合相结合。

实施此操作后,您可以委托自己的combinations版本,而不是使用预先存在的版本。