c++ - 查找列表项的组合

标签 c++ cartesian-product

我有 n 个包含项目的输入列表。 现在我想计算包含原始输入列表中所有项目组合的结果列表(长度为 n)(每个输入列表取一个项目)。

我想我应该在这里提供一个例子(n=3):

inputList1: [item1, item2, item3]
inputList2: [item4]
inputList3: [item5, item6]

resultList1: [item1, item4, item5]
resultList2: [item1, item4, item6]
resultList3: [item2, item4, item5]
resultList4: [item2, item4, item6]
resultList5: [item3, item4, item5]
resultList6: [item3, item4, item6]

我感觉有点傻,但我不知道如何实现 (C++) 函数来为任何 n 和任何 inputList 长度创建这些结果。我想我应该使用某种递归,但我不知道如何。
有什么想法吗?

最佳答案

一般的想法,用伪代码:

vector<item> List1, List2, List3;
// fill the lists

vector<item> v;
vector<vector<item>> results;

for each item i in List1
{
    v.push_back(i)
    for each item j in List2
    {
        v.push_back(j);
        for each item k in List3
        {
            v.push_back(k);
            results.push_back(v);
            v.pop_back();
        }
        v.pop_back();
    }
    v.pop_back();
}

要在可变数量的列表上执行此操作,我会采用递归方法。然后每个 for 循环将被替换为递归函数调用。此函数需要接受您的 inputList 列表、结果列表和存储中间结果的容器(上例中的 v)作为参数。

希望对您有所帮助。

关于c++ - 查找列表项的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10501800/

相关文章:

c++如何输出我在函数中操作的数组?

c++ - 如何从 Windows 服务启动系统帐户下的单独进程?

python - 无法在 Windows 10 collect2.exe 错误上使用 Python27 MingW 安装 leven 包

python - 如何选择任何有序的三个算术运算符组,允许替换?

java - 通过Java Stream实现多个集合的笛卡尔积

c++ - 带模板的条件返回类型

C++ Windows API - 如何检索字体缩放百分比

sql - 如何避免 INNER JOIN 查询中的笛卡尔积?

list - Prolog - 笛卡尔积计算器

ruby - 部分笛卡尔积(确保每组中有一个值)