我想創建一個std :: discrete_distribution離散分佈:創建C++從列表
http://en.cppreference.com/w/cpp/numeric/random/discrete_distribution
所有的例子我見過定義它像上面的鏈接std::discrete_distribution<> d({40, 10, 10, 40});
但是,相反的{40, 10, 10, 40}
我想以編程方式執行此操作,而不是硬編碼。
我想創建一個std :: discrete_distribution離散分佈:創建C++從列表
http://en.cppreference.com/w/cpp/numeric/random/discrete_distribution
所有的例子我見過定義它像上面的鏈接std::discrete_distribution<> d({40, 10, 10, 40});
但是,相反的{40, 10, 10, 40}
我想以編程方式執行此操作,而不是硬編碼。
std::discrete_distribution
有constructor overload這需要迭代器,所以修改cppreference的例子使用std::vector
:
#include <iostream>
#include <map>
#include <random>
#include <vector>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::vector<int> list{40, 10, 10, 40};
std::discrete_distribution<> d(list.begin(), list.end());
std::map<int, int> m;
for(int n=0; n<10000; ++n) {
++m[d(gen)];
}
for(auto p : m) {
std::cout << p.first << " generated " << p.second << " times\n";
}
}
但是你喜歡的載體可以加載。這裏我使用了相同的初始化器列表來生成相似的結果。
您可以使用爲discrete_distribution定義的另一個構造函數,該構造函數需要一對迭代器。我剛剛修改了en.cppreference.com中的代碼,因此discrete_distribution
需要一對迭代器。
#include <iostream>
#include <map>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::array<int, 4> a{40, 10, 10, 40};
std::discrete_distribution<> d(a.begin(), a.end());
std::map<int, int> m;
for(int n=0; n<10000; ++n) {
++m[d(gen)];
}
for(auto p : m) {
std::cout << p.first << " generated " << p.second << " times\n";
}
}
[構造函數2需要迭代器。](http://en.cppreference.com/w/cpp/numeric/random/discrete_distribution/discrete_distribution) – user4581301
「程序化」是什麼意思?請使用客觀條件提出確切的問題。 – ricab