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