我正在尝试创建一个 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}我不想以编程方式而不是硬编码来执行此操作。
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 << " times\n";
}
}
Run Code Online (Sandbox Code Playgroud)
可以根据需要加载矢量。在这里,我使用了相同的初始化列表来生成类似的结果。