如何在 C++ 中生成满足特定比率的随机数?

问题描述 投票:0回答:1

在为游戏生成树的上下文中考虑这段人为设计的代码:


// Pretend there's some code somewhere that associates the 0-100 number to its corresponding size.
enum class TreeSize : uint32_t
{
    Small, // 0-9
    Medium, // 10-60
    Large,// 61-90
    ExtraLarge, // 91-100

};

// returns tree size
int GenerateTree()
{
    std::random_device rd;
    std::mt19937_64 mt(rd());
    std::uniform_int_distribution<int32_t> dist(0, 100);

   return dist(s_mt);
}

假设我想生成 1000 棵树,但绑定到特定比例的树大小。例如:

  • 小树:15%
  • 中等树木:30%
  • 大树:40%
  • 特大树:15%

我该怎么做? 有现成的东西可以做到这一点吗? 当然,这是很多人以前不得不面对的问题,是吗?

c++ random probability
1个回答
2
投票

你想要的是

std::discrete_distribution
,在这里你可以分别指定每个项目的概率权重:

int GenerateTree()
{
    std::random_device rd;
    std::mt19937_64 mt(rd());
    std::discrete_distribution<int32_t> dist({15, 30, 40, 15});

    return dist(s_mt);
}
© www.soinside.com 2019 - 2024. All rights reserved.