class template
<random>

std::discrete_distribution

template <class IntType = int> class discrete_distribution;
Discrete distribution
Random number distribution that produces integer values according to a discrete distribution, where each possible value has a predefined probability of being produced:



The w's are a set of n non-negative individual weights set on construction (or using member param). The probability of each of the n possible numbers to be produced being their corresponding weight divided by the total of all weights.

To produce a random value following this distribution, call its member function operator().

Template parameters

IntType
An integer type. Aliased as member type result_type.
By default, this is int.

Member types

The following aliases are member types of discrete_distribution:

member typedefinitionnotes
result_typeThe first template parameter (IntType)The type of the numbers generated (defaults to int)
param_typenot specifiedThe type returned by member param.

Member functions


Distribution parameters:


Non-member functions


Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// discrete_distribution #include <iostream> #include <random> int main() { const int nrolls = 10000; // number of experiments const int nstars = 100; // maximum number of stars to distribute std::default_random_engine generator; std::discrete_distribution<int> distribution {2,2,1,1,2,2,1,1,2,2}; int p[10]={}; for (int i=0; i<nrolls; ++i) { int number = distribution(generator); ++p[number]; } std::cout << "a discrete_distribution:" << std::endl; for (int i=0; i<10; ++i) std::cout << i << ": " << std::string(p[i]*nstars/nrolls,'*') << std::endl; return 0; }

Possible output:
a discrete_distribution: 0: ************ 1: ************* 2: ***** 3: ****** 4: ************ 5: ************ 6: ****** 7: ****** 8: ************ 9: ************ 


See also