我正在尝试创建一个std :: discrete_distribution:
http://en.cppreference.com/w/cpp/numeric/random/discrete_distribution
我见过的所有示例都在std::discrete_distribution<> d({40, 10, 10, 40});
但我不是以{40, 10, 10, 40}
而是以编程方式执行此操作,而不是硬编码。
答案 0 :(得分:4)
#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";
}
}
有一个constructor overload来获取迭代器,因此修改cppreference的示例以使用std::discrete_distribution
:
std::vector
可以随意加载矢量。在这里,我使用相同的初始化列表来生成类似的结果。
答案 1 :(得分:2)
您可以使用为discrete_distribution定义的另一个构造函数,它接受一对迭代器。我只是修改了en.cppreference.com中的代码,使得handle_asynchronously :doXYZ, run_at: proc { |i| i.run_at_time }
获取了一对迭代器。
discrete_distribution