在C ++中生成唯一的随机数

时间:2019-02-08 02:58:33

标签: c++ random

C ++初学者在这里。我在下面有这段代码。不仅限于此,这是我需要帮助的部分。我需要生成随机数(0-9)并将其推回到向量中。我希望这些随机数是唯一的。我怎么做? 另外,我不能使用std :: find(std :: begin(vector),std :: end(vector),a)。 非常感谢大家。

/usr/local/lib/php

1 个答案:

答案 0 :(得分:0)

如果您不太在乎效率,并且希望在不替换{a,a + 1,...,b}的情况下进行均匀采样,则可以创建vector<int> vstart,其中{{1} }。之后,如果要k个样本并将其存储在vstart[i]=a+i中,请在[0,v_samples)中生成一个随机数numrand,然后将v.size()推入vstart[numrand] ,然后从vsamples中删除采样的条目(删除对应于“无替换”部分),重复k次。删除可能会很昂贵,因此改组vstart并选择改组后的向量的前k个条目。

洗牌时要小心,因为您可能无法获得均匀的洗牌:https://www.i-programmer.info/programming/theory/2744-how-not-to-shuffle-the-kunth-fisher-yates-algorithm.html。最好的方法是使用vstarthttp://www.cplusplus.com/reference/algorithm/shuffle/中的shuffle函数,或者自己编写经过验证的shuffle(Knuth shuffle是解决此问题的经典解决方案)。