std::discrete_distribution::discrete_distribution
From Cppreference
| discrete_distribution(); | (1) | (since C++11) | 
| template< class InputIterator > discrete_distribution( InputIterator first, InputIterator last ); | (2) | (since C++11) | 
| discrete_distribution( std::initializer_list<double> weights ); | (3) | (since C++11) | 
| template< class UnaryOperation > discrete_distribution( std::size_t count, double xmin, double xmax, UnaryOperation unary_op ); | (4) | (since C++11) | 
| explicit discrete_distribution( const param_type& params ); | (2) | (since C++11) | 
Constructs a new distribution object.
1) Default constructor. Constructs the distribution with weights . This distribution will always generate 0.
2) Constructs the distribution with weights in the range [first, last). If first == last, the effects are the same as of the default constructor.
3) Constructs the distribution with weights in weights. Effectively calls initializer_list(weigths.begin(), weights.end()).
4) Constructs the distribution with count weights that are generated using function unary_op. Each of the weights is equal to wi = unary_op(xmin + δ/2 + i · δ), where δ =
| (xmax − xmin) | 
| count | 
5) Constructs the distribution with params as the distribution parameters.
[edit] Parameters
| first, last | - | the range of elements defining the numbers to use as weights. The type of the elements referred by InputIterator must be convertible to double | |||||||||
| weights | - | initializer list containing the weights | |||||||||
| unary_op | - | unary operation function object that will be applied. The signature of the function should be equivalent to the following: 
 The signature does not need to have const &.  | |||||||||
| params | - | the distribution parameter set | |||||||||