Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Generuje dyskretny rozkład liczb całkowitych, który ma interwały o jednolitej szerokości z jednolitym prawdopodobieństwem w każdym interwale.
Składnia
template<class IntType = int>
class discrete_distribution
{
public:
// types
typedef IntType result_type;
struct param_type;
// constructor and reset functions
discrete_distribution();
template <class InputIterator>
discrete_distribution(InputIterator firstW, InputIterator lastW);
discrete_distribution(initializer_list<double> weightlist);
template <class UnaryOperation>
discrete_distribution(size_t count, double xmin, double xmax, UnaryOperation funcweight);
explicit discrete_distribution(const param_type& parm);
void reset();
// generating functions
template <class URNG>
result_type operator()(URNG& gen);
template <class URNG>
result_type operator()(URNG& gen, const param_type& parm);
// property functions
vector<double> probabilities() const;
param_type param() const;
void param(const param_type& parm);
result_type min() const;
result_type max() const;
};
Parametry
Typ int
Typ wyniku liczby całkowitej domyślnie to int
. Aby uzyskać informacje o możliwych typach, zobacz losowe>.<
Uwagi
Ten rozkład próbkowania ma interwały o jednolitej szerokości z jednolitym prawdopodobieństwem w każdym interwale. Aby uzyskać informacje na temat innych rozkładów próbkowania, zobacz piecewise_linear_distribution Class (Klasa piecewise_linear_distribution) i piecewise_constant_distribution Class (Klasa piecewise_constant_distribution).
Poniższa tabela zawiera linki do artykułów dotyczących poszczególnych członków:
discrete_distribution
param_type
Funkcja vector<double> probabilities()
właściwości zwraca poszczególne prawdopodobieństwa dla każdej wygenerowanej liczby całkowitej.
Aby uzyskać więcej informacji na temat klas dystrybucji i ich składowych, zobacz losowe>.<
Przykład
// compile with: /EHsc /W4
#include <random>
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
using namespace std;
void test(const int s) {
// uncomment to use a non-deterministic generator
// random_device rd;
// mt19937 gen(rd());
mt19937 gen(1701);
discrete_distribution<> distr({ 1, 2, 3, 4, 5 });
cout << endl;
cout << "min() == " << distr.min() << endl;
cout << "max() == " << distr.max() << endl;
cout << "probabilities (value: probability):" << endl;
vector<double> p = distr.probabilities();
int counter = 0;
for (const auto& n : p) {
cout << fixed << setw(11) << counter << ": " << setw(14) << setprecision(10) << n << endl;
++counter;
}
cout << endl;
// generate the distribution as a histogram
map<int, int> histogram;
for (int i = 0; i < s; ++i) {
++histogram[distr(gen)];
}
// print results
cout << "Distribution for " << s << " samples:" << endl;
for (const auto& elem : histogram) {
cout << setw(5) << elem.first << ' ' << string(elem.second, ':') << endl;
}
cout << endl;
}
int main()
{
int samples = 100;
cout << "Use CTRL-Z to bypass data entry and run using default values." << endl;
cout << "Enter an integer value for the sample count: ";
cin >> samples;
test(samples);
}
Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for the sample count: 100
min() == 0
max() == 4
probabilities (value: probability):
0: 0.0666666667
1: 0.1333333333
2: 0.2000000000
3: 0.2666666667
4: 0.3333333333
Distribution for 100 samples:
0 :::
1 ::::::::::::::
2 ::::::::::::::::::
3 :::::::::::::::::::::::::::::
4 ::::::::::::::::::::::::::::::::::::
Wymagania
Nagłówek:<losowy>
Przestrzeń nazw: std
discrete_distribution::d iscrete_distribution
Tworzy rozkład.
// default constructor
discrete_distribution();
// construct using a range of weights, [firstW, lastW)
template <class InputIterator>
discrete_distribution(InputIterator firstW, InputIterator lastW);
// construct using an initializer list for range of weights
discrete_distribution(initializer_list<double> weightlist);
// construct using unary operation function
template <class UnaryOperation>
discrete_distribution(size_t count, double low, double high, UnaryOperation weightfunc);
// construct from an existing param_type structure
explicit discrete_distribution(const param_type& parm);
Parametry
firstW
Pierwszy iterator na liście, z którego ma być skonstruowany rozkład.
lastW
Ostatni iterator na liście, z którego należy skonstruować rozkład (bez włączenia, ponieważ iteratory używają pustego elementu na końcu).
lista wag
Initializer_list, z którego należy skonstruować rozkład.
count
Liczba elementów w zakresie dystrybucji. Jeśli count==0
parametr jest odpowiednikiem konstruktora domyślnego (zawsze generuje zero).
Niski
Najniższa wartość w zakresie dystrybucji.
wysoki
Najwyższa wartość w zakresie dystrybucji.
weightfunc
Obiekt reprezentujący funkcję prawdopodobieństwa dla rozkładu. Zarówno parametr, jak i wartość zwracana muszą być konwertowane na double
wartość .
parm
Struktura param_type
używana do konstruowania rozkładu.
Uwagi
Domyślny konstruktor tworzy obiekt, którego przechowywana wartość prawdopodobieństwa ma jeden element o wartości 1. Spowoduje to dystrybucję, która zawsze generuje zero.
Konstruktor zakresu iteratora, który ma parametry firstW i lastW tworzy obiekt rozkładu przy użyciu wartości wag pobranych z iteratorów w sekwencji interwału [firstW, lastW).
Konstruktor listy inicjatora, który ma parametr listy wagowej, tworzy obiekt dystrybucji z wagami z listy wag inicjatora.
Konstruktor, który ma parametry count, low, high i weightfunc tworzy obiekt dystrybucji zainicjowany na podstawie następujących reguł:
- Jeśli liczba< 1, n = 1, a jako taka jest równoważna domyślnemu konstruktorowi, zawsze generuje zero.
- Jeśli liczba 0, n count = .> Podana d = (wysoka - niska) / n jest większa niż zero, przy użyciu jednolitych podporządków d, każda waga jest przypisywana w następujący sposób:
weight[k] = weightfunc(x)
, gdzie x = niski + k d / + 2, dla k * = 0, ..., n - 1.
Konstruktor, który ma param_type
parametr parm konstruuje obiekt dystrybucji przy użyciu parm jako przechowywanej struktury parametrów.
discrete_distribution::p aram_type
Przechowuje wszystkie parametry dystrybucji.
struct param_type {
typedef discrete_distribution<result_type> distribution_type;
param_type();
// construct using a range of weights, [firstW, lastW)
template <class InputIterator>
param_type(InputIterator firstW, InputIterator lastW);
// construct using an initializer list for range of weights
param_type(initializer_list<double> weightlist);
// construct using unary operation function
template <class UnaryOperation>
param_type(size_t count, double low, double high, UnaryOperation weightfunc);
std::vector<double> probabilities() const;
bool operator==(const param_type& right) const;
bool operator!=(const param_type& right) const;
};
Parametry
firstW
Pierwszy iterator na liście, z którego ma być skonstruowany rozkład.
lastW
Ostatni iterator na liście, z którego należy skonstruować rozkład (bez włączenia, ponieważ iteratory używają pustego elementu na końcu).
lista wag
Initializer_list, z którego należy skonstruować rozkład.
count
Liczba elementów w zakresie dystrybucji. Jeśli liczba jest równa 0, jest to odpowiednik konstruktora domyślnego (zawsze generuje zero).
Niski
Najniższa wartość w zakresie dystrybucji.
wysoki
Najwyższa wartość w zakresie dystrybucji.
weightfunc
Obiekt reprezentujący funkcję prawdopodobieństwa dla rozkładu. Zarówno parametr, jak i wartość zwracana muszą być konwertowane na double
wartość .
Prawy
Obiekt param_type
, który ma być porównywany z tym obiektem.
Uwagi
Ten pakiet parametrów można przekazać do , aby operator()
wygenerować wartość zwracaną.