从数字中获取所有组合而不重复

dua*_*uaa 3 c++ permutation visual-c++-2008 visual-c++

嗨我使用c ++,我可以找到一个简单的方法从一组数字中获取一个数组,其中包含ex:{1,2,3}之间的所有可能组合

  { {3,1,2},
   {1,2,3},
   {3,2,1},
   {1,3,2},
   {2,1,3},
   {2,3,1}
  };
Run Code Online (Sandbox Code Playgroud)

问题是如果我得到5个或更多数字如何使120组合

Jam*_*lis 7

这些是排列,而不是组合.

您可以使用它std::next_permutation来计算序列的所有排列.它看起来像这样:

std::array<int, 3> data = { 1, 2, 3 };
do {
    // use current permutation
} while (std::next_permutation(data.begin(), data.end()));
Run Code Online (Sandbox Code Playgroud)

(我在std::array这个例子中使用了C++ 0x;你也可以array在C++ TR1和Boost中找到容器.这个算法也适用于任何可双向迭代的容器,比如std::vector.)