#include <array>
#include <iostream>
#include <vector>
#include <map>
#include <random>
 
int main()
{
// no hardware access on ideone
//    std::random_device rd;
//    std::mt19937 gen(rd());
    std::mt19937 gen(time(NULL));

    const std::array<double, 6> p = {10, 10, 20, 30, 20, 10};
    std::discrete_distribution<> d(p.begin(), p.end());
    std::map<int, int> m;
    for(int n=0; n<10000; ++n) {
        ++m[d(gen)];
    }
    for(auto i = m.begin(); i!=m.end(); ++i) {
        std::cout << i->first << " generated " << i->second << " times\n";
    }
}
