向量值的不同组合

the different combinations of a vector's values

本文关键字:组合 向量      更新时间:2023-10-16

假设我有一个n个值的向量,我想得到它的值的不同组合,例如:如果我有vect =

[a, b, c],我想要的不同组合是:[a,b,c],[a,b],[a,c],[b,c],[a],[b],[c]

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

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 开始计数。

给你一个伪代码,请把它转换成真正的代码。

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

想象一下,你有一个函数已经可以为你做到这一点。让我们称之为combinations.

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

实现这一点后,您可以委托给自己的combinations版本,而不是使用预先存在的版本。