我想编写一行代码,对向量进行洗牌。自动完成建议shuffle_order_engine,这让我好奇它是什么,因为它的名字意味着它可以做我想做的。
通常,我使用std::shuffle(std::begin(v), std::end(v), gen)对向量进行洗牌,其中gen是随机数生成器(通常是mt19937_64)。
engine/ sais,shuffle_order_engine是:
一种引擎适配器类模板,它适应伪随机数生成器引擎类型,使数字以不同的顺序传递。
嗯,cplusplus.com没有提供一个例子。shuffle_order_engine是否与我的shuffle收养相同?
发布于 2015-10-03 15:22:48
不完全是。它缓冲伪rng的输出,并返回下几个结果中的任何一个,而不是下一个结果。结果,如果你要求一个相同大小的向量,然后用这个序列填充,然后对其进行改组,结果是相似的,但排列的分布略有不同。(我想)
如果你想要的是一个混乱的随机序列,那么当然。为什么要重新发明轮子?
发布于 2020-07-11 19:40:26
C++的shuffle_order_engine实现了类似于Bays-Durham洗牌的东西,而Bays-Durham洗牌是为了改善弱随机数生成器的随机性质量而设计的,而不一定像列表的随机洗牌一样。
https://stackoverflow.com/questions/32924002
复制相似问题