使用qrand()和qsrand()的唯一随机数序列

Sur*_*esh 3 random qt

我想在QT中生成唯一的随机数序列,使用QDateTime :: currentDateTime().toTime_t()作为种子值,qrand()会生成唯一的随机数吗?

bal*_*pha 8

qrand只能产生尽可能多的唯一的号码贴合到一个整数,所以-无论何种实施-你不能指望的唯一性.

此外,知道不同的种子创建不同的随机整数将产生一种可预测性,有效地使其qrand不再随机.

编辑:我发誓,我不是想通过张贴卡通来取笑你; 我认为这是对问题的一个很好的解释:

替代文字http://www.dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/2000/300/2318/2318.strip.gif

  • 不,不是必须的. (2认同)

Cal*_*itt 6

根据您存储会话ID的方式,您可以使用UUID生成(大部分)保证唯一标识符.请参阅文档QUuid.还要注意这一点(粗体添加):

你也可以使用createUuid().生成的UUID createUuid()是随机类型.它们的QUuid::Version位被设置为QUuid::Random,它们的QUuid::Variant位被设置为QUuid::DCE.UUID的其余部分由随机数组成.从理论上讲,这意味着生成的UUID很createUuid()可能不是唯一的.但这是一个非常小的机会.

我可以保证这些生成的UUID不一定是唯一的,所以如果你确实需要它们是唯一的,请查看libuuid或类似的东西.