几个向量的笛卡尔积
类似的问题之前已经被问过,但我无法找到与我的问题完全匹配的问题。几个向量的笛卡尔积
我有4个向量,其中每个都保存200-500个4位整数。每个矢量中元素的确切数量不尽相同,但我可以将其修复为特定值。我需要在这4个向量中找到所有可能的元素组合。
如:
V1 [10,30] V2 [11,45] V3 [63,56] V4 [82,98]
所以我得到这样的:
[10,11,63,82]; [30,11,63,82]; [10,45,63,82]; [10,45,56,82]等。
这个算法有一个共同的名称,所以我可以在网上找到它的一些参考?否则,任何有关在C++中实现这一点的提示都会有所帮助。性能不是一个问题,因为我只需要运行一次算法。 STL中是否有内置的东西?
没有太多的算法的...
for(vector<int>::const_iterator i1 = v1.begin(); i1 != v1.end(); ++i1)
for(vector<int>::const_iterator i2 = v2.begin(); i2 != v2.end(); ++i2)
for(vector<int>::const_iterator i3 = v3.begin(); i3 != v3.end(); ++i3)
for(vector<int>::const_iterator i4 = v4.begin(); i4 != v4.end(); ++i4)
cout << "[" << *i1 << "," << *i2 << "," << *i3 << "," << *i4 << "]" << endl;
+1这是做到这一点的合乎逻辑的方法。可能有更漂亮的方式来表示,但过程将是相同的。 – 2010-03-08 22:32:13
这就像是你希望你有一个meta-for循环可以循环遍历for循环。 – 2010-03-09 00:02:17
+1谢谢,这当然是工作。我同意Poita关于meta loop的评论。 – 2010-03-09 16:59:28
当心将有200和500之间^ 4^4的组合。 500^4为625亿,200^4超过10亿。 – 2010-03-08 22:37:47
等一下,如果你只有2,v1 = {1,1,2}和v2 = {1,2},你是否希望{1,2}在输出中出现两次?另外,你认为{1,2}和{2,1}是相同的吗? – 2010-03-08 22:39:51
此操作的通用名称是“笛卡尔产品”。 – 2010-03-08 22:40:38