15

を使用するコードstd::random_shuffleの場合、生成される疑似ランダム シーケンスがプログラムの実行ごとに異なるように、ランダム シードを設定する必要があります。

ここのコード例は、への呼び出しを行います

srand ( unsigned ( time (NULL) ) );

する必要がある

#include <ctime>
#include <cstdlib>

C++11 には疑似乱数生成の主要な更新が含まれているため、これはまだ最新の状態ですか? のランダムシードを設定するには何を使用すればよいstd::random_shuffleですか?

4

3 に答える 3

25

random_shuffle提供しない限り、実装定義の乱数ジェネレーターを使用します。したがって、いいえ、使用srandは必ずしも正しいとは限りません。

それ以外の場合は、提供されたジェネレーターを使用します。randそれが使用されるものであることを確認したい場合に使用できます。

srand(seed);
std::random_shuffle(first, last, [](int n) { return rand() % n; });
// this is a biased generator
// see <http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx>

ただし、<random>rand() の代わりに新しい機能を使用することをお勧めします。例を次に示します。

std::default_random_engine gen(seed);

std::shuffle(first, last, gen);
于 2013-01-21T15:19:40.610 に答える
3

C++11 を使用している場合は、最後の例のように、std::shuffle代わりに を使用しstd::random_shuffle、乱数ジェネレーターを渡すことを検討してください。

于 2013-01-21T15:21:12.963 に答える