从列表创建C ++离散分发

时间:2017-05-08 04:51:10

标签: c++ std

我正在尝试创建一个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}而是以编程方式执行此操作,而不是硬编码。

2 个答案:

答案 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