2016-03-29 6 views
6

どうすればランダムにランダムになるシードやハッシュを生成できますか?番号を選ぶたびに変更する必要があります。 C++の新機能なので、これをどうやって行うのかが正確にはわかりません。ありがとう! :Dランダムシード/ハッシュを実際にランダムに作るにはどうすればいいですか?

+0

@DevanshMohanKaushik - あなたの提案された複製の参照された質問/回答は、悪い習慣であり、ランダムな麻痺の重複につながる可能性がある、種子として時間の使用を主張するので、悪い示唆です。同時に(Webサーバと考える)プロセス間には、 – Soren

+0

@ sorenもあります。これには、あなたが引用した節を含め、他の有用な回答へのリンクも含まれています。 – Hummingbird

+0

この質問はC++用のもので、重複マークはCを要求しています。 –

答えて

1

環境データをサンプリングしたり、量子乱数源にアクセスしたりすることなく、「実際にランダムな」乱数発生器はありません。真に乱数(http://qrng.anu.edu.au/FAQ.php#api)が必要な場合は、ANU乱数ソースにアクセスすることを検討してください。

それ以外の場合、ブーストは、ほとんどの目的のために十分でなければならない、より堅牢な擬似RNGを、提供:http://www.boost.org/doc/libs/1_58_0/doc/html/boost_random.html

+3

ブースト・ランダムの多くはC++ 11で標準化されており、 ' 'からアクセスできます。 – Yuushi

5

に使用できるC++ 11 std::random_deviceで。包括的なガイドについては、linkをご覧ください。 std::random_devicestd::mt19937を使用する代わりに、あなたは決して使用srand & randはずですが、 - ほとんどの場合、次はあなたが望むものを次のようになります:

ビデオリンクから不可欠メッセージを抽出

#include <iostream> 
#include <random> 
int main() { 
    std::random_device rd; 
    std::mt19937 mt(rd()); 
    std::uniform_int_distribution<int> dist(0,99); 
    for (int i = 0; i < 16; i++) { 
     std::cout << dist(mt) << " "; 
    } 
    std::cout << std::endl; 
}