如何从不同的小组成员那里得到笛卡尔积? [英] How to get Cartesian product from different group member?
本文介绍了如何从不同的小组成员那里得到笛卡尔积?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正如标题所述,我在C ++中遇到了一些问题。
As the title mentioned, I have some problems in C++.
如果我有 std :: vector< std :: vector< int> > tmpvec
vector < vector <int> > tmpvec = {
{1,2,3},
{4,5},
{6,7,8,9},
{10,11}
};
我如何生成矢量的向量的所有可能组合
how can I generate all possible combination of a vector of vector
1,4,6,10
1,4,6,11
1,4,7,10
1,4,7,11
......
最多有48种不同的组合。
There are at most 48 different combination.
推荐答案
您可以这样做
bool increase(const std::vector<std::vector<int>>& v, std::vector<std::size_t>& it)
{
for (std::size_t i = 0, size = it.size(); i != size; ++i) {
const std::size_t index = size - 1 - i;
++it[index];
if (it[index] >= v[index].size()) {
it[index] = 0;
} else {
return true;
}
}
return false;
}
void do_job(const std::vector<std::vector<int>>& v,
const std::vector<std::size_t>& it)
{
for (std::size_t i = 0; i != it.size(); ++i) {
// TODO: manage case where v[i] is empty if relevant.
std::cout << v[i][it[i]] << " ";
}
std::cout << std::endl;
}
void iterate(const std::vector<std::vector<int>>& v)
{
std::vector<std::size_t> it(v.size(), 0u);
do {
do_job(v, it);
} while (increase(v, it));
}
这篇关于如何从不同的小组成员那里得到笛卡尔积?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文