我有一個大小爲「n」的整數向量。在C++中生成整型向量元素的所有可能組合
e.g.
std::vector<int> vec;
vec.pushback(0);
vec.pushback(1);
vec.pushback(2);
vec.pushback(3);
....
現在我想要生成大小= {0,1,2,...,n}的所有可能的組合。
請記住, {0,1,3}不等於{3,1,0}或{1,0,3}或{3,0,1}
請幫助我如果你有一個想法。
在此先感謝。
我有一個大小爲「n」的整數向量。在C++中生成整型向量元素的所有可能組合
e.g.
std::vector<int> vec;
vec.pushback(0);
vec.pushback(1);
vec.pushback(2);
vec.pushback(3);
....
現在我想要生成大小= {0,1,2,...,n}的所有可能的組合。
請記住, {0,1,3}不等於{3,1,0}或{1,0,3}或{3,0,1}
請幫助我如果你有一個想法。
在此先感謝。
你可以做這樣的事情:
#include<iostream>
#include<algorithm>
#include <vector>
std::ostream& operator<< (std::ostream& os, std::vector<int> v)
{
for (auto it = v.begin(); it != v.end(); ++it)
{
os << *it << ",";
}
return os;
}
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
do {
std::cout << v;
} while (std::next_permutation(v.begin(), v.end()));
}
按@ JamesKanze的評論,如果向量進行排序以開頭才能做到這一點,所以如果你有一個未排序的載體,你應該叫std::sort
上它首先。在this
來看,它說:
變換範圍[第一,最後)到從集合的,按字典對於責令
operator<
或comp
所有排列的下一個排列。
你可以看到它在行動here
您可能會提到,只有列表以排序開始時纔可以使用。 – 2013-02-14 18:43:42
@Tony感謝您的回覆,我看到它會生成固定大小的組合,但我如何重複應用它來生成不同大小的組合,意味着1,2和3 – DataMiner 2013-02-14 18:49:03
我認爲最簡單的方法是每次再次調用函數時間你的矢量大小的變化。 – 2013-02-14 18:58:30
http://en.cppreference.com/w/cpp/algorithm/next_permutation – Mat 2013-02-14 18:32:12
@Mat謝謝您的回覆,nexr_permutation會產生固定大小的組合,但我如何重複應用它爲不同的大小。 – DataMiner 2013-02-14 18:44:16
查看右側「相關」部分的鏈接。所有這些都已經被問到和回答,你需要選擇這些部分並使其適合你的情況。 – Mat 2013-02-14 18:48:08