【发布时间】:2018-11-03 14:43:07
【问题描述】:
我有一个包含整数的集合向量,如下所示:
std::vector<std::set<int> > vec = {{2,4},{1,3,8},{7,5}};
上述集合向量示意图
| 2 | 4 |
| 1 | 3 | 8 |
| 7 | 5 |
我需要遍历向量的每个集合元素,以便向量行中的每个集合元素访问下一行中的每个集合元素,依此类推。
例如,向量第一行的集合的第一个元素(即2)将访问第二行的第一个元素(即1),然后访问第三行的第一个元素(即7)。同样,这些遍历的顺序如下:
First vector row and first set element -> Second vector row and first set element -> Third vector row and first set element
First vector row and first set element -> Second vector row and first set element -> Third vector row and second set element
First vector row and first set element -> Second vector row and second set element -> Third vector row and first set element
First vector row and first set element -> Second vector row and second set element -> Third vector row and second set element
First vector row and first set element -> Second vector row and third set element -> Third vector row and first set element
First vector row and first set element -> Second vector row and third set element -> Third vector row and second set element
First vector row and second set element -> Second vector row and first set element -> Third vector row and first set element
First vector row and second set element -> Second vector row and first set element -> Third vector row and second set element
First vector row and second set element -> Second vector row and second set element -> Third vector row and first set element
First vector row and second set element -> Second vector row and second set element -> Third vector row and second set element
First vector row and second set element -> Second vector row and third set element -> Third vector row and first set element
First vector row and second set element -> Second vector row and third set element -> Third vector row and second set element
生成的向量应该是列表的向量,其每个元素如下:
std::vector<std::list<int> > list = {{2,1,7},{2,1,5},{2,3,7},{2,3,5},{2,8,7},{2,8,5},{4,1,7},{4,1,5},{4,3,7},{4,3,5},{4,8,7},{4,8,5}};
列表合成向量示意图
| 2 | 1 | 7 |
| 2 | 1 | 5 |
| 2 | 3 | 7 |
| 2 | 3 | 5 |
| 2 | 8 | 7 |
| 2 | 8 | 5 |
| 4 | 1 | 7 |
| 4 | 1 | 5 |
| 4 | 3 | 7 |
| 4 | 3 | 5 |
| 4 | 8 | 7 |
| 4 | 8 | 5 |
在 C++ 中实现这一目标的最有效方法是什么?
【问题讨论】:
-
请描述所需的模式,不要让我们从样本中猜测。此外,在您的样本中,是单独的集合行还是列?是 [{2,1,7}, {4,3,5} {8}]?还是其他组合?
-
AFAIK 没有现成的解决方案来计算标准库中的组合(这很糟糕,因为这个问题经常在 SO 上弹出)。可以采用 this 方法来处理所需的容器类型,或者基于迭代器使其通用。
-
感谢你们所有的努力,我已经编辑了我的描述以使其更容易理解。
-
输出中的最后一个数字是否意味着
7在5之前? -
@Caleth 没必要,您的解决方案提供了所需的输出。您能否分享一下它的时间复杂度?