Boost.Randomで簡単な確率

たまに欲しくなるのでメモ。

#include <iostream>
#include <ctime>
#include <boost/array.hpp>
#include <boost/random.hpp>

using namespace boost;

int main()
{
    // 80%の確率で0, 20%の確率で1
    array<int, 10> probability = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1};

    mt19937 gen(static_cast<unsigned long>(std::time(0)));
    uniform_int<> dst(0, probability.size() - 1);
    variate_generator<mt19937, uniform_int<> > rand(gen, dst);

    for (int i = 0; i < 10; i++)
    {
        std::cout << probability[rand()] << std::endl;
    }
}
0
0
0
0
0
1
1
0
0
0