`shuffle_order_engine`是用来做什么的?

4
我想编写一行代码来打乱一个向量。自动补全建议使用shuffle_order_engine,这使我很好奇它是什么,因为名称表明它可以完成我的需求。
通常我使用std::shuffle(std::begin(v), std::end(v), gen)对向量进行洗牌,其中gen是随机数生成器(通常为mt19937_64)。 http://www.cplusplus.com/reference/random/shuffle_order_engine/shuffle_order_engine是:

引擎适配器类模板,通过适应伪随机数生成器引擎类型以便以不同的顺序提供数字。

然而,cplusplus.com没有提供示例。 shuffle_order_engine是否与我的shuffle采用相同?
2个回答

0
不完全正确。它缓冲了伪随机数生成器的输出,并返回接下来几个结果中的任何一个,而不是下一个结果。与如果您请求了相同大小的向量并用该序列填充它,然后对其进行洗牌相比,结果类似但排列的分布略有不同。(我想是这样的。)
如果您想要的是一个洗牌的随机序列,那么当然可以使用它。为什么要重复造轮子呢?

0
C++中的shuffle_order_engine实现了类似于Bays-Durham Shuffle的东西,而Bays-Durham Shuffle旨在提高较弱随机数生成器的随机性质量,不一定与列表的随机洗牌行为相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接