用于从列表中挑选的C++函数,其中每个元素具有不同的概率

Stu*_*art 8 c++ random probability

我有一个结构数组,结构中的一个字段是一个浮点数.我想选择一个结构,其中拾取它的概率是相对于浮点数的值.即

struct s{
  float probability;
  ...
}

s sArray[50];
Run Code Online (Sandbox Code Playgroud)

决定选择哪一个的最快方法是什么?这有功能吗?如果我知道所有概率字段的总和(注意它不会是1),那么我可以迭代每个s并probability/total_probability与随机数进行比较,改变每个s的随机数吗?即

if( (float) (rand() / RAND_MAX) < probability)...
Run Code Online (Sandbox Code Playgroud)

rlb*_*ond 9

float p = (rand() / static_cast<float>(RAND_MAX)) * total_probability;
s* current = &sArray[0];
while ( (p -= current->probability) > 0)
    ++current;
// `current` now points to your chosen target
Run Code Online (Sandbox Code Playgroud)