# std::discrete_distribution::discrete_distribution

From cppreference.com
< cpp‎ | numeric‎ | random‎ | discrete distribution

discrete_distribution(); | (1) | (since C++11)
template< class InputIt > discrete_distribution( InputIt first, InputIt 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 ); | (5) | (since C++11)

Constructs a new distribution object.

1) Default constructor. Constructs the distribution with a single weight p={1}. 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 discrete_distribution(weights.begin(), weights.end()).

4) Constructs the distribution with `count` weights that are generated using function `unary_op`. Each of the weights is equal to w
i = unary_op(xmin + δ/2 + i · δ), where δ =

(xmax − xmin)
count

and i ∈ {0, ..., count−1}. `xmin` and `xmax` must be such that δ > 0. If count == 0 the effects are the same as of the default constructor.

5) Constructs the distribution with `params` as the distribution parameters.

### 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:

Ret fun(const Type &a);

The signature does not need to have const &.
The type Type must be such that an object of type double can be dereferenced and then implicitly converted to Type. The type Ret must be such that an object of type double can be dereferenced and assigned a value of type Ret. ​

params | - | the distribution parameter set
Type requirements
- `InputIt` must meet the requirements of `InputIterator`.

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/numeric/random/discrete_distribution/discrete_distribution&oldid=77678"