1

サイズ「n」の整数ベクトルがあります。

e.g.
std::vector<int> vec;
vec.pushback(0);
vec.pushback(1);
vec.pushback(2);
vec.pushback(3);
....

ここで、サイズ = {0、1、2、...、n} のすべての可能な組み合わせを生成したいと考えています。

{0, 1, 3} は {3, 1, 0} または {1, 0, 3} または {3, 0, 1} と等しくないことに注意してください

アイデアがあれば助けてください。

前もって感謝します。

4

1 に答える 1

2

あなたはこのようなことをすることができます:

#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最初にそれを呼び出す必要があります。

これを見てそれは言う:

operator<範囲[最初、最後)を、またはに関して辞書式順序で並べられたすべての順列のセットから次の順列に変換しますcomp

ここで実際に動作しているのを見ることができます

于 2013-02-14T18:42:49.463 に答える