c – powerset中组合或子集的next_permutation

前端之家收集整理的这篇文章主要介绍了c – powerset中组合或子集的next_permutation前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有一些等效的库或函数可以为我提供像next_permutation这样的一组值的下一个组合?

解决方法

组合:来自Mark Nelson关于同一主题文章,我们有next_combination http://marknelson.us/2002/03/01/next-permutation
排列:从STL我们有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&C++相关文章