C ++初学者在这里。我在下面有这段代码。不仅限于此,这是我需要帮助的部分。我需要生成随机数(0-9)并将其推回到向量中。我希望这些随机数是唯一的。我怎么做? 另外,我不能使用std :: find(std :: begin(vector),std :: end(vector),a)。 非常感谢大家。
/usr/local/lib/php
答案 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。最好的方法是使用vstart
库http://www.cplusplus.com/reference/algorithm/shuffle/中的shuffle函数,或者自己编写经过验证的shuffle(Knuth shuffle是解决此问题的经典解决方案)。