fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <random>
  4. #include <iterator>
  5. #include <ctime>
  6. int main()
  7. {
  8. // std::random_device rd; // no access to /dev/urandom on ideone
  9. // std::mt19937 gen(rd());
  10. std::mt19937 gen(std::time(NULL));
  11. double weights[] =
  12. {0, // do not generate the number 0
  13. 1, // number 1 at base probability
  14. 2, // number 2 twice as often
  15. 0.2, // number 3 at 1/5th probability
  16. 0.2, // number 4 at 1/5th probability
  17. 1, 1, 1, 1, 1, 1}; // 5..10 at base probability
  18.  
  19. // std::discrete_distribution<> d(std::begin(weights), std::end(weights)); // ideone's compiler is outdated
  20. std::discrete_distribution<> d(weights, weights + sizeof weights/sizeof weights[0]);
  21.  
  22. std::map<int, int> m;
  23. for(int n=0; n<10000; ++n) {
  24. ++m[d(gen)];
  25. }
  26. // for(auto p : m) { // ideone's compiler is outdated
  27. for(auto i = m.begin(); i!=m.end(); ++i) {
  28. // std::cout << p.first << " generated " << p.second << " times\n";
  29. std::cout << i->first << " generated " << i->second << " times\n";
  30. }
  31. }
Success #stdin #stdout 0s 2964KB
stdin
Standard input is empty
stdout
1 generated 1113 times
2 generated 2114 times
3 generated 232 times
4 generated 236 times
5 generated 1072 times
6 generated 996 times
7 generated 1084 times
8 generated 1073 times
9 generated 1053 times
10 generated 1027 times