Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Her aralıkta tekdüzen olasılığa sahip tekdüzen genişlik aralıklarına sahip ayrık bir tamsayı dağılımı oluşturur.
Sözdizimi
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;
};
Parametreler
IntType
Tamsayı sonuç türü, varsayılan olarak olarak intayarlanır. Olası türler için bkz <. rastgele>.
Açıklamalar
Bu örnekleme dağılımı, her aralıkta tekdüzen olasılığı olan tekdüzen genişlik aralıklarına sahiptir. Diğer örnekleme dağıtımları hakkında bilgi için bkz . piecewise_linear_distribution Sınıfı ve piecewise_constant_distribution Sınıfı.
Aşağıdaki tabloda, tek tek üyeler hakkındaki makalelere bağlantılar yer alır:
discrete_distribution
param_type
özellik işlevi vector<double> probabilities() , oluşturulan her tamsayı için tek tek olasılıkları döndürür.
Dağıtım sınıfları ve üyeleri hakkında daha fazla bilgi için bkz <. rastgele>.
Örnek
// 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 ::::::::::::::::::::::::::::::::::::
Gereksinimler
Üst bilgi:<rastgele>
Ad alanı: std
discrete_distribution::d iscrete_distribution
Dağıtımı oluşturur.
// 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);
Parametreler
firstW
Dağıtımın oluşturulduğu listedeki ilk yineleyici.
lastW
Dağıtımın oluşturulduğu listedeki son yineleyici (yineleyiciler uç için boş bir öğe kullandığından kapsayıcı değildir).
ağırlık listesi
Dağıtımın oluşturulduğu initializer_list .
count
Dağıtım aralığındaki öğelerin sayısı. ise count==0, varsayılan oluşturucuya eşdeğerdir (her zaman sıfır oluşturur).
alçak
Dağıtım aralığındaki en düşük değer.
yüksek
Dağıtım aralığındaki en yüksek değer.
weightfunc
Dağılımın olasılık işlevini temsil eden nesne. Hem parametre hem de dönüş değeri olarak doubledönüştürülebilir olmalıdır.
parm
Dağıtımı param_type oluşturmak için kullanılan yapı.
Açıklamalar
Varsayılan oluşturucu, depolanan olasılık değeri 1 değerine sahip bir öğeye sahip olan bir nesne oluşturur. Bu, her zaman sıfır oluşturan bir dağıtıma neden olur.
firstW ve lastW parametrelerine sahip yineleyici aralık oluşturucusu, [firstW, lastW) aralık dizisi boyunca yineleyicilerden alınan ağırlık değerlerini kullanarak bir dağıtım nesnesi oluşturur.
Ağırlık listesi parametresine sahip başlatıcı listesi oluşturucusu, başlatıcı listesi ağırlık listesinden ağırlıkları olan bir dağıtım nesnesi oluşturur.
Count, low, high ve weightfunc parametrelerine sahip oluşturucu, şu kurallara göre başlatılan bir dağıtım nesnesi oluşturur:
- 1 sayısı<, n = 1 ise ve bu nedenle varsayılan oluşturucuya eşdeğerse, her zaman sıfır oluşturulur.
- Sayı> 0 ise, n = sayı. Sağlanan d = (yüksek - düşük) / n sıfırdan büyüktür, d tekdüzen alt aralıklar kullanılarak her ağırlık şu şekilde atanır:
weight[k] = weightfunc(x), burada x = düşük + k * d d + / 2, k = 0, ..., n - 1.
Parametre ayrıştırması olan param_type oluşturucu, depolanan parametre yapısı olarak parm kullanarak bir dağıtım nesnesi oluşturur.
discrete_distribution::p aram_type
Dağıtımın tüm parametrelerini depolar.
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;
};
Parametreler
firstW
Dağıtımın oluşturulduğu listedeki ilk yineleyici.
lastW
Dağıtımın oluşturulduğu listedeki son yineleyici (yineleyiciler uç için boş bir öğe kullandığından kapsayıcı değildir).
ağırlık listesi
Dağıtımın oluşturulduğu initializer_list .
count
Dağıtım aralığındaki öğelerin sayısı. Sayı 0 ise, bu varsayılan oluşturucuya eşdeğerdir (her zaman sıfır oluşturur).
alçak
Dağıtım aralığındaki en düşük değer.
yüksek
Dağıtım aralığındaki en yüksek değer.
weightfunc
Dağılımın olasılık işlevini temsil eden nesne. Hem parametre hem de dönüş değeri olarak doubledönüştürülebilir olmalıdır.
Sağ
Bununla param_type karşılaştıracak nesne.
Açıklamalar
Dönüş değerini oluşturmak için bu parametre paketi'ne operator() geçirilebilir.