我試圖洗牌vector
的內容。 vector
排序後,內容將被轉移到隊列中。隊列表示一副牌。我遇到的問題是,即使關閉該程序,我也會持續收到相同的結果。事實上,即使在關閉IDE之後,我也會得到相同的序列。換句話說,卡片洗牌一次,無論如何都保持順序。我曾嘗試過使用這種隨機化內容的新方法,但不得不訴諸舊方法。我希望能夠一勞永逸地解決這個問題。如果沒有辦法做到這一點,我的下一個問題將是如何隨機化內容,同時仍然使用std::shuffle
。我也嘗試auto engine = std::default_random_engine{};
只獲得相同的結果。謝謝。使用std :: random_device洗牌卡片
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";
Downvoted由於缺乏研究工作。人們很難讀懂任何有關文件的文件。像'mt19937'沒有了解這裏有什麼問題,並且搜索*「Seed mt19937 C++」*也給每個搜索引擎都帶來了不錯的結果。 –
我用不同的整數播種mt19937,看看有沒有什麼改變。我無意中在這裏發佈了這些代碼。我已經通過使用rd接種mt19937來修復代碼,這是預期的實現。 std :: random_device是一個隨機種子嗎? –
這甚至沒有編譯。不,「std :: random_device」不是種子,雖然它可以用來獲取一個。請閱讀[docs](http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine)。 –