是否有一些功能,類似srand()
,我需要調用以確保std::random_shuffle()
總是產生不同的結果?即如果我用相同的數據多次調用它,我希望每次訂單都不一樣。我如何確定這一點?如何確保std :: random_shuffle總是產生不同的結果?
回答
std::random_shuffle
有兩種形式。一個需要2個參數(開始/結束迭代器),另一個需要3個(開始/結束迭代器和一個隨機生成器)。
第一種形式使用std::rand()
,因此您將使用std::srand()
爲其隨機數生成器生成種子。您也可以使用3參數版本並自己提供RNG。
據我瞭解,第一種形式如何實現它是它的業務。有些平臺可能不使用'std :: rand'。 –
你說得對。我在看libstdC++版本。原作者應參考STL的文檔。或者如果他們不想依賴它,他們應該使用第三種形式並使用'boost :: random'或C++ 0x'std :: random'。 –
std::random_shuffle
具有用於指定RNG的模板過載。
template <class RandomAccessIterator, class RandomNumberGenerator>
void random_shuffle (RandomAccessIterator first, RandomAccessIterator last,
RandomNumberGenerator& rand);
我想你可以給一個隨機數發生器仿函數到std :: random_shuffle,這樣你就可以能夠完全控制隨機數生成。尋找here,這個仿函數代替了RandomNumberGenerator模板參數。
一般稱之爲srand(time(NULL))
之前調用的std :: random_shuffle()會給你你需要什麼,它會給你不同的結果,每次調用的std ::時間random_shuffle()。這是因爲std :: random_shuffle()在許多填充實現中(例如VS2008和gcc)在內部調用rand()。
當然,如果你想用另一個參數調用另一個超載的std :: random_shuffle,你可以自己修改一個RNG。
作爲最後的手段,您可以:
- 呼叫
std::random_shuffle
- 計算序列的哈希值,將其存儲在
std::set
- 丟棄該散列值是否已經存在
我沒有看到如何使用自定義生成器可以保證序列是唯一的。因爲C++ 14
random_shuffle已過時(在C++ 17除去)中,用混洗取代(因爲存在C++ 11) http://en.cppreference.com/w/cpp/algorithm/random_shuffle
可能的使用:
shuffle(items.begin(), items.end(), std::default_random_engine(std::random_device()()));
- 1. 的std :: random_shuffle產生相同的結果,每次
- 2. C++ random_shuffle總是給了相同的結果
- 3. 天計算器不總是產生準確的結果
- 4. 同樣的計算結果如何產生不同的結果
- 5. 總結表中的列不會產生正確的結果
- 6. 這個空比較總是會產生相同的結果嗎?
- 7. buddy.hashers總是產生不同的散列
- 8. NSComparisonResult不會產生正確的結果
- 9. 的XPath產生不同的充結果
- 10. 程序總是產生相同的值?
- 11. GNU產生完全不同的結果
- 12. Html.ActionLink根據URL產生不同結果
- 13. bloginfo('template_url') - 產生不同的結果
- 14. PHP strtotime產生不同的結果
- 15. BSR和BSF產生相同的結果
- 16. 產生相同結果
- 17. 結果總是正確的?
- 18. 產生不同於其他查詢的MySQL的結果結果
- 19. 如何用DEAP產生不同的隨機結果?
- 20. 切換如果和否則不會產生相同的結果
- 21. strcmp始終產生相同的結果
- 22. boost :: thread在每次運行時產生不同的結果
- 23. 使用std :: random_shuffle用的std ::陣列
- 24. .append()爲不同的參數類型產生不同的結果
- 25. 兩個相同的公式產生不同的結果
- 26. nunit-console測試從不同位置產生不同的結果
- 27. ZIP沒有產生正確的結果
- 28. 運行Ruby作爲index.cgi,[1,3,5] .shuffle總是產生相同的結果
- 29. MSXML2.XMLHTTP產生不同的結果,如果我只是在web瀏覽器
- 30. OpenNLP產生不良結果
那並不」 t聽起來對我來說是非常隨機的... – Blindy
@Bindy:它是隨機的,但結果不是均勻分佈的。 –
srand是相當不錯的。如果它不足以滿足您的需求,請搜索其他隨機生成器(可能是提升) –