Boost.Randomのジェネレータでシードの再設定をするには、ジェネレータのseed()メンバ関数を使用します。
この関数は、ジェネレータのコンセプトとして規定されているので、Boost.Randomの全てのジェネレータで同じように使用できます。
以下は、メルセンヌ・ツイスターの例:
#include <iostream> #include <boost/random.hpp> int main() { std::size_t seed = 0; boost::random::mt19937 gen(seed); for (int i = 0; i < 3; ++i) { std::cout << gen() << std::endl; } std::cout << "--" << std::endl; gen.seed(seed); // シードを再設定 for (int i = 0; i < 3; ++i) { std::cout << gen() << std::endl; } }
2357136044 2546248239 3071714933 -- 2357136044 2546248239 3071714933
シード再設定後に、同じ値が生成されているのがわかります。
分布クラスを通しても同じになります:
#include <iostream> #include <boost/random.hpp> int main() { std::size_t seed = 0; boost::random::mt19937 gen(seed); boost::random::uniform_int_distribution<> dist(0, 10); for (int i = 0; i < 3; ++i) { std::cout << dist(gen) << std::endl; } std::cout << "--" << std::endl; gen.seed(seed); // シードを再設定 for (int i = 0; i < 3; ++i) { std::cout << dist(gen) << std::endl; } }
6 6 7 -- 6 6 7
ちなみに、シードを取得する機能はないようなので、シードの管理自体はユーザーが行う必要があります。