本文介绍了组合和排列在C ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
C ++中最广泛使用的现有库提供了n个元素中k个元素的所有组合和排列?
What's the most widely used existing library in C++ to give all the combination and permutation of k elements out of n elements?
我不是要求算法,现有的库或方法。
I am not asking the algorithm but the existing library or methods.
感谢。
推荐答案
组合: Mark Nelson关于同一主题的文章,我们有next_combination 排列:从STL我们有std :: next_permutation
Combinations: from Mark Nelson's article on the same topic we have next_combination http://marknelson.us/2002/03/01/next-permutation Permutations: from STL we have std::next_permutation
template <typename Iterator>
inline bool next_combination(const Iterator first, Iterator k, const Iterator last)
{
if ((first == last) || (first == k) || (last == k))
return false;
Iterator itr1 = first;
Iterator itr2 = last;
++itr1;
if (last == itr1)
return false;
itr1 = last;
--itr1;
itr1 = k;
--itr2;
while (first != itr1)
{
if (*--itr1 < *itr2)
{
Iterator j = k;
while (!(*itr1 < *j)) ++j;
std::iter_swap(itr1,j);
++itr1;
++j;
itr2 = k;
std::rotate(itr1,j,last);
while (last != j)
{
++j;
++itr2;
}
std::rotate(k,itr2,last);
return true;
}
}
std::rotate(first,k,last);
return false;
}
这篇关于组合和排列在C ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!