C++ 11范围内的随机数和明确的可能性

Med*_* Rb 3 c++ random probability c++11

我想知道我可以在给定范围内生成随机数(C++ 11)并控制某些数字的可能性.假设我生成0到4之间的随机数,数字"1"可能会在集合中绘制50%.

Rap*_*ptz 8

如果范围是[0,n),那么您可以使用std::discrete_distribution.

对于将1设置为50%的具体示例,您可以执行以下操作:

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::discrete_distribution<> d({10, 50, 30, 10});
    for(unsigned i = 0; i < 10; ++i) {
        std::cout << d(gen) << '\n';
    }
}
Run Code Online (Sandbox Code Playgroud)

还有,你可以使用像其他抽样分布std::piecewise_constant_distributionstd::piecewise_linear_distribution.与<random>标题中的许多其他不同分布一起.