...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::random::discrete_distribution
// In header: <boost/random/discrete_distribution.hpp> template<typename IntType = int, typename WeightType = double> class discrete_distribution { public: // types typedef WeightType input_type; typedef IntType result_type; // member classes/structs/unions class param_type { public: // types typedef discrete_distribution distribution_type; // construct/copy/destruct param_type(); template<typename Iter> param_type(Iter, Iter); param_type(const std::initializer_list< WeightType > &); template<typename Range> explicit param_type(const Range &); template<typename Func> param_type(std::size_t, double, double, Func); // public member functions std::vector< WeightType > probabilities() const; // friend functions template<typename CharT, typename Traits> friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &, const param_type &); template<typename CharT, typename Traits> friend std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &, const param_type &); friend bool operator==(const param_type &, const param_type &); friend bool operator!=(const param_type &, const param_type &); }; // construct/copy/destruct discrete_distribution(); template<typename Iter> discrete_distribution(Iter, Iter); discrete_distribution(std::initializer_list< WeightType >); template<typename Range> explicit discrete_distribution(const Range &); template<typename Func> discrete_distribution(std::size_t, double, double, Func); explicit discrete_distribution(const param_type &); // public member functions template<typename URNG> IntType operator()(URNG &) const; template<typename URNG> IntType operator()(URNG &, const param_type &) const; result_type min() const; result_type max() const; std::vector< WeightType > probabilities() const; param_type param() const; void param(const param_type &); void reset(); // friend functions template<typename CharT, typename Traits> friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &, const discrete_distribution &); template<typename CharT, typename Traits> friend std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &, const discrete_distribution &); friend bool operator==(const discrete_distribution &, const discrete_distribution &); friend bool operator!=(const discrete_distribution &, const discrete_distribution &); };
The class discrete_distribution
models a random distribution . It produces integers in the range [0, n) with the probability of producing each value is specified by the parameters of the distribution.
discrete_distribution
public
construct/copy/destructdiscrete_distribution();
Creates a new
object that has and . discrete_distribution
template<typename Iter> discrete_distribution(Iter first, Iter last);
Constructs a discrete_distribution
from an iterator range. If first
== last
, equivalent to the default constructor. Otherwise, the values of the range represent weights for the possible values of the distribution.
discrete_distribution(std::initializer_list< WeightType > wl);
Constructs a
from a discrete_distribution
std::initializer_list
. If the initializer_list
is empty, equivalent to the default constructor. Otherwise, the values of the initializer_list
represent weights for the possible values of the distribution. For example, given the distribution
* discrete_distribution<> dist{1, 4, 5}; *
The probability of a 0 is 1/10, the probability of a 1 is 2/5, the probability of a 2 is 1/2, and no other values are possible.
template<typename Range> explicit discrete_distribution(const Range & range);
Constructs a discrete_distribution
from a Boost.Range range. If the range is empty, equivalent to the default constructor. Otherwise, the values of the range represent weights for the possible values of the distribution.
template<typename Func> discrete_distribution(std::size_t nw, double xmin, double xmax, Func fw);
Constructs a discrete_distribution
that approximates a function. If nw is zero, equivalent to the default constructor. Otherwise, the range of the distribution is [0, nw), and the weights are found by calling fw with values evenly distributed between and , where .
explicit discrete_distribution(const param_type & param);
Constructs a discrete_distribution
from its parameters.
discrete_distribution
public member functionstemplate<typename URNG> IntType operator()(URNG & urng) const;
Returns a value distributed according to the parameters of the discrete_distribution
.
template<typename URNG> IntType operator()(URNG & urng, const param_type & param) const;
Returns a value distributed according to the parameters specified by param.
result_type min() const;
Returns the smallest value that the distribution can produce.
result_type max() const;
Returns the largest value that the distribution can produce.
std::vector< WeightType > probabilities() const;
Returns a vector containing the probabilities of each value of the distribution. For example, given
* discrete_distribution<> dist = { 1, 4, 5 }; * std::vector<double> p = dist.param(); *
the vector, p will contain {0.1, 0.4, 0.5}.
param_type param() const;
Returns the parameters of the distribution.
void param(const param_type & param);
Sets the parameters of the distribution.
void reset();
Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset.
discrete_distribution
friend functionstemplate<typename CharT, typename Traits> friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > & os, const discrete_distribution & dd);
Writes a distribution to a std::ostream
.
template<typename CharT, typename Traits> friend std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > & is, const discrete_distribution & dd);
Reads a distribution from a std::istream
friend bool operator==(const discrete_distribution & lhs, const discrete_distribution & rhs);
Returns true if the two distributions will return the same sequence of values, when passed equal generators.
friend bool operator!=(const discrete_distribution & lhs, const discrete_distribution & rhs);
Returns true if the two distributions may return different sequences of values, when passed equal generators.