Kelas discrete_distribution
Menghasilkan distribusi bilangan bulat diskrit yang memiliki interval lebar seragam dengan probabilitas seragam di setiap interval.
Sintaks
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;
};
Parameter
IntType
Jenis hasil bilangan bulat, default ke int
. Untuk jenis yang mungkin, lihat acak>.<
Keterangan
Distribusi pengambilan sampel ini memiliki interval lebar seragam dengan probabilitas seragam di setiap interval. Untuk informasi tentang distribusi pengambilan sampel lainnya, lihat Kelas piecewise_linear_distribution dan Kelas piecewise_constant_distribution.
Tabel berikut ini menautkan ke artikel tentang masing-masing anggota:
discrete_distribution
param_type
Fungsi vector<double> probabilities()
properti mengembalikan probabilitas individual untuk setiap bilangan bulat yang dihasilkan.
Untuk informasi selengkapnya tentang kelas distribusi dan anggotanya, lihat acak>.<
Contoh
// 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 ::::::::::::::::::::::::::::::::::::
Persyaratan
Header:<acak>
Namespace: std
discrete_distribution::d iscrete_distribution
Membangun distribusi.
// 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);
Parameter
firstW
Iterator pertama dalam daftar untuk membangun distribusi.
lastW
Iterator terakhir dalam daftar untuk membangun distribusi (non-inklusif karena iterator menggunakan elemen kosong untuk akhir).
daftar bobot
initializer_list untuk membangun distribusi.
count
Jumlah elemen dalam rentang distribusi. Jika count==0
, setara dengan konstruktor default (selalu menghasilkan nol).
Rendah
Nilai terendah dalam rentang distribusi.
tinggi
Nilai tertinggi dalam rentang distribusi.
weightfunc
Objek yang mewakili fungsi probabilitas untuk distribusi. Parameter dan nilai pengembalian harus dapat dikonversi ke double
.
parm
Struktur yang param_type
digunakan untuk membangun distribusi.
Keterangan
Konstruktor default membuat objek yang nilai probabilitas tersimpan memiliki satu elemen dengan nilai 1. Ini akan menghasilkan distribusi yang selalu menghasilkan nol.
Konstruktor rentang iterator yang memiliki parameter firstW dan lastW membangun objek distribusi dengan menggunakan nilai berat yang diambil dari iterator selama urutan interval [firstW, lastW).
Konstruktor daftar penginisialisasi yang memiliki parameter daftar bobot membangun objek distribusi dengan bobot dari daftar penginisialisasi daftar weightlist.
Konstruktor yang memiliki parameter hitungan, rendah, tinggi, dan bobot membuat objek distribusi yang diinisialisasi berdasarkan aturan ini:
- Jika hitungan< 1, n = 1, dan dengan demikian setara dengan konstruktor default, selalu menghasilkan nol.
- Jika hitungan> 0, n = hitungan. Disediakan d = (rendah tinggi - ) / n lebih besar dari nol, menggunakan subranges seragam d, setiap berat ditetapkan sebagai berikut:
weight[k] = weightfunc(x)
, di mana x = k * rendah + d d + / 2, untuk k = 0, ..., n - 1.
Konstruktor yang memiliki param_type
parm parameter membangun objek distribusi menggunakan parm sebagai struktur parameter yang disimpan.
discrete_distribution::p aram_type
Menyimpan semua parameter distribusi.
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;
};
Parameter
firstW
Iterator pertama dalam daftar untuk membangun distribusi.
lastW
Iterator terakhir dalam daftar untuk membangun distribusi (non-inklusif karena iterator menggunakan elemen kosong untuk akhir).
daftar bobot
initializer_list untuk membangun distribusi.
count
Jumlah elemen dalam rentang distribusi. Jika hitungan adalah 0, ini setara dengan konstruktor default (selalu menghasilkan nol).
Rendah
Nilai terendah dalam rentang distribusi.
tinggi
Nilai tertinggi dalam rentang distribusi.
weightfunc
Objek yang mewakili fungsi probabilitas untuk distribusi. Parameter dan nilai pengembalian harus dapat dikonversi ke double
.
right
Objek param_type
untuk dibandingkan dengan ini.
Keterangan
Paket parameter ini dapat diteruskan ke operator()
untuk menghasilkan nilai pengembalian.