std :: random_device无法在g ++中工作

时间:2017-08-19 09:00:50

标签: c++ c++11 random

我在Windows中使用g ++与MinGW编译我的c ++代码,如下所示:

std::mt19937_64 rng(std::random_device{}());
std::uniform_int_distribution<int> dist(0, words.size() - 1);
std::string curr = words[dist(rng)];

正如你所看到的,这会从std :: string数组中提取一个随机单词,但是当我输入该单词时,它总是一样的,我已经意识到问题出在std :: random_device中,它总是输出相同的数字。

为什么会这样?我该如何解决?

gcc version 5.3.0

如果可以提供帮助,我会使用vs代码进行编程

当然,我正确包含随机

1 个答案:

答案 0 :(得分:1)

您在MinGW上使用std::random_device。更具体地说,您每次需要随机数时都要创建一个新实例。不支持此用法(或者更确切地说,不生成随机数)。有关MinGW具有此行为的事实,请参阅Why do I get the same sequence for every run with std::random_device with mingw gcc4.8.1?,但为了修复您的特定代码,您可以执行以下操作:

std::mt19937_64 rng(std::random_device{}());
std::uniform_int_distribution<int> dist(0, words.size() - 1);

for (int ii = 0; ii < 100; ++ii) {
    std::string curr = words[dist(rng)];
}

也就是说,重复使用相同的random_device,而不是一次。如果程序运行之间的随机性非常重要,请考虑播种或使用不同的RNG。

相关问题