【发布时间】:2014-03-25 00:47:04
【问题描述】:
我有以下向量向量:
V = std::vector<std::vector<MyType> >
V 中包含的向量不一定具有相同的长度。 MyType 有一个成员函数合并,签名如下:
bool MyType::merge(MyType in, MyType &out);
这个成员函数接受 self 和 in 并检查它们是否可以合并到 out 中。如果是这样,则将 out 设置为合并的结果,并且 函数返回真。否则返回false,不修改out。
我想遍历 V 中的每个向量,并将所有可能的组合合并到最终结果 std::vector 中。举个例子, 如果 V 包含三个向量 A、B、C,每个向量有 3 个元素,我想得到一个具有以下结果的向量:
A_0 - B_0 - C_0
A_0 - B_0 _ C_1
A_0 - B_0 _ C_2
A_0 - B_1 - C_0
A_0 - B_1 _ C_1
A_0 - B_1 _ C_2
A_0 - B_2 - C_0
A_0 - B_2 _ C_1
A_0 - B_2 _ C_2
A_1 - B_0 ... etc
如果在任何时候合并返回 false,则合并的结果应该不在结果向量中。
解释有点长,但我觉得这应该不是很难,我觉得有一个 使用一些 stl 功能完成此任务的简单方法,但我根本看不到它。
【问题讨论】:
-
您提供的示例代码与您提供的函数签名并不真正匹配。它需要两个参数并返回一个布尔值,而您的示例代码表明它是一个一元
MyType成员函数,返回一个MyType(或可转换为它的东西)。 -
Arne,谢谢,我将示例更改为更通用,而不是实际的示例代码。
-
我在您的示例中看不到任何“合并”。我只能看到计数。函数
merge在哪里调用?什么输入和什么输出? -
“合并合并”是什么意思?你的意思是,例如对于
A_0 - B_1 - C_0行,您需要X = A_0; X.merge(B_1, Y); Y.merge(C_0, Z);之类的东西?
标签: c++ algorithm combinations