【发布时间】:2016-08-30 14:19:46
【问题描述】:
我正在尝试改组vector 的内容。将vector 排序后,将其内容转移到队列中。队列代表一副纸牌。我遇到的问题是,即使我关闭程序,我也会不断收到相同的结果。事实上,即使在关闭 IDE 后,我也会得到相同的序列。换句话说,这些牌被洗了一次,无论如何都保持这个顺序。我之前尝试过使用这种随机化内容的新方法,但不得不求助于旧方法。我希望最终一劳永逸地解决这个问题。如果没有办法做到这一点,我的下一个问题是如何在仍然使用std::shuffle 的同时随机化内容。我也试过auto engine = std::default_random_engine{}; 只是为了获得相同的结果。谢谢。
std::vector<string> v;
map<string, int>::const_iterator iter;
for (iter = cards.begin(); iter != cards.end(); iter++) {
v.push_back(iter->first);
}
std::random_device rd;
std::mt19937 g(rd());
//auto engine = std::default_random_engine{};
std::shuffle(v.begin(), v.end(), g);
std::copy(v.begin(), v.end(), std::ostream_iterator<string>(std::cout, " "));
std::cout << "\n";
【问题讨论】:
-
因缺乏研究努力而被否决。人们几乎无法阅读任何有关 smth 的文档。喜欢
mt19937却不知道这里出了什么问题,并且搜索 "Seed mt19937 C++" 在每个搜索引擎中也能得到不错的结果。 -
我正在为 mt19937 播种不同的整数,看看是否有任何变化。我不小心在这里发布了该代码。我已经通过使用 rd 播种 mt19937 来修复代码,这是预期的实现。 std::random_device 不是随机种子吗?
-
这甚至不能编译。不,
std::random_device不是种子,尽管它可以用来获取种子。请去阅读一些docs。 -
我很抱歉在 rd 之后省略了左括号和右括号。它现在应该编译。我还必须承认我已经看过那个链接,但仍然有点困惑,所以我想我会在这里问,因为人们通常都很乐于助人。通常。
-
你的系统是什么? MinGW 的
random_device已知已损坏。