我有一个大小为“n”的整数向量。
e.g.
std::vector<int> vec;
vec.pushback(0);
vec.pushback(1);
vec.pushback(2);
vec.pushback(3);
....
现在我想生成 size = {0, 1, 2, ... , n} 的所有可能组合。
请记住 {0, 1, 3} 不等于 {3, 1, 0} 或 {1, 0, 3} 或 {3, 0, 1}
如果您有想法,请帮助我。
提前致谢。
我有一个大小为“n”的整数向量。
e.g.
std::vector<int> vec;
vec.pushback(0);
vec.pushback(1);
vec.pushback(2);
vec.pushback(3);
....
现在我想生成 size = {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
先调用它。
看着这个,它说:
将范围 [first, last) 转换为所有排列集合中的下一个排列,这些排列相对于
operator<
or是按字典顺序排列的comp
。
你可以在这里看到它的作用