我有一个c++ vector
和std::pair<unsigned long, unsigned long>
个对象。我正在尝试使用std::next_permute()
生成矢量对象的排列。但是,我希望排列的大小是给定的,类似于python中的permutations
函数,其中指定了预期返回的排列的大小。
基本上,相当于[c++
] >>
import itertools
list = [1,2,3,4,5,6,7]
for permutation in itertools.permutations(list, 3):
print(permutation)
我有一个带有std :: pair
如果效率不是主要考虑因素,我们可以遍历所有排列并跳过重复的排列:
std::size_t fact(std::size_t n) {
std::size_t f = 1;
for (; n > 0; --n)
f *= n;
return f;
}
int main() {
std::vector<int> vec{1, 2, 3, 4};
std::size_t k = 2;
const std::size_t m = fact(vec.size() - k);
std::size_t n = 0;
do {
if (n == 0) {
for (std::size_t i = 0; i < k; ++i) // print first k entries
std::cout << vec[i];
std::cout << std::endl;
}
if (++n == m)
n = 0;
}
while (std::next_permutation(vec.begin(), vec.end()));
}