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

all*_*tar 0 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}我不想以编程方式而不是硬编码来执行此操作。

use*_*301 6

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)

可以根据需要加载矢量。在这里,我使用了相同的初始化列表来生成类似的结果。