从列表中创建离散分布C++
Create C++ discrete distribution from list
我正在尝试创建一个std::d iscrete_distribution:
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
有一个接受迭代器的构造函数重载,因此修改 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 << " timesn";
}
}
矢量可以随心所欲地加载。在这里,我使用相同的初始值设定项列表来生成类似的结果。
您可以使用为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 << " timesn";
}
}
相关文章:
- 改变或缩放两个正态分布以具有特定的相关系数
- 如何创建没有特定定义的随机分布?uniform_int_distribution是从其他类继承的吗?
- C++随机数分布传递给函数
- 从转换后的容器元素创建离散分布
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 在编译时选择随机数分布
- C++:创建1000次唯一的随机分布,在任何分布中都没有重复的数字
- c++在循环中定义一组概率分布
- 分布MPI散点错误的数字
- 无法按 lambda 中的值捕获随机分布和生成器?
- 离散分布不对称
- 如何在C++中将函数值更改为表中的值(伽马分布)?
- 在运行时为随机分布类成员设置最小和最大边界?
- 逆生存函数与正态分布的PPF(ICDF)?
- 多态性与C++11分布
- 从提升二项分布中抽取随机数
- 在 c++ 中创建具有指数分布的随机数(可视化标准)
- 将值均匀分布到数组中
- C++11 与不同类型的随机分布共享相同的函数
- 我可以在不指定数字分布的情况下使用随机生成器吗?