根据另一个对象和概率随机选取一个对象?

时间:2013-12-17 19:15:51

标签: c++ random probability-density

我有一个叫做诱饵的基类,它有一些儿童类,一些诱饵名称,假设bait1,诱饵2 ......等另一种鱼类fish1,fish2,...等等

我希望用户选择诱饵,并且对于每个诱饵,他有可能捕获某种鱼,例如。如果他选择了诱饵1,他捕获鱼的概率为40%,捕获鱼2的概率为30%,捕获鱼的概率为25%3,捕获鱼的概率为5%4,如果他选择的诱饵2与实例相同但概率不同,任何想法如何实现这个?

抱歉,我修复了上一个例子的问题

1 个答案:

答案 0 :(得分:1)

以下是使用std::discrete_distribution的诱饵1的解决方案,您可以看到实时示例here

#include <iostream>
#include <map>
#include <random>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::discrete_distribution<> bait1({40,30,25,5});
    std::map<int, int> m;
    for(int n=0; n<10000; ++n) {
        ++m[bait1(gen)];
    }
    for(auto p : m) {
        std::cout << "fish " <<  (p.first+1) << " generated " << p.second << " times\n";
    }
}

示例输出:

fish 1 generated 3964 times
fish 2 generated 2981 times
fish 3 generated 2544 times
fish 4 generated 511 times

为诱饵2等修改这个......应该是直截了当的