如何生成一个随机种子/哈希值使得rand函数真正随机?

6

我应该如何生成一个种子或哈希值,使得rand函数实际上是随机的?我需要它在每次选择一个数字时都会改变。由于我是c++的新手,所以不太确定如何做。谢谢!:D


@DevanshMohanKaushik -- 你提出的重复建议中所引用的问题/答案是一个糟糕的建议,因为它们主张使用时间作为种子--这是一种不好的做法,可能会导致在同时进行种子处理的进程之间产生重复的随机数(比如Web服务器)。 - Soren
@soren,它还包含其他有用答案的链接,包括你在评论部分提到的那个。 - Hummingbird
这个问题是关于C++的,而标记为重复的问题是关于C语言的。 - Utkarsh Bhardwaj
2个回答

5

在C++11中,您可以使用std::random_device。我建议您观看此链接获取全面的指南。

从视频链接中提取基本信息:您应该永远不要使用srandrand,而是使用std::random_devicestd::mt19937 - 对于大多数情况,以下内容将是您想要的:

#include <iostream>
#include <random>
int main() {
    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_int_distribution<int> dist(0,99);
    for (int i = 0; i < 16; i++) {
        std::cout << dist(mt) << " ";
    }
    std::cout << std::endl;
}

1

3
请注意,大部分的boost random已经在C++11标准中被规范化,并且可以通过<random>访问。 - Yuushi

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