我想在QT中生成唯一的随机数序列,使用QDateTime :: currentDateTime()。toTime_t()作为种子值,qrand()会生成唯一的随机数吗?
不.qrand
只能生成与整数相同的唯一数字,因此 - 无论实现如何 - 您都不能指望唯一性。
此外,知道不同的种子创建不同的随机整数将产生一定程度的可预测性,有效地使qrand
不再随机。
编辑:我发誓,我不是想通过张贴卡通来取笑你;我认为这是对问题的一个很好的解释:
(来源:dilbert.com)
根据您存储会话ID的方式,您可以使用UUID生成(大部分)保证唯一标识符。请参阅QUuid
的文档。还要注意这一点(粗体添加):
你也可以使用
createUuid()
。createUuid()
生成的UUID是随机类型。他们的QUuid::Version
位设置为QUuid::Random
,他们的QUuid::Variant
位设置为QUuid::DCE
。 UUID的其余部分由随机数组成。从理论上讲,这意味着createUuid()
生成的UUID很可能不是唯一的。但这是一个非常小的机会。
我可以保证那些生成的UUID不一定是唯一的,所以如果你确实需要它们是唯一的,请查看libuuid
或类似的东西。
根据Qt Documentation,QRand只是标准rand()的线程安全版本,我不认为使用的方法比基于该描述的rand()更安全/更优越。
我认为您需要使用与“唯一”随机数不同的术语(没有Psuedo-Random Number Generator将产生唯一的流,因为输入X将始终产生输出Y)。实际情况如何?