2017-03-14 95 views
-2

我正在執行某些算法,我在這個算法中使用了map<string,map<string,double>>。它完美地工作,給出正確的結果,但如果我更改map<string,map<string,double>>unordered_map<string,map<string,double>>,我的算法停止對某些輸入的工作。地圖vs無序地圖

我想問我是否缺少unordered_mapmap之間的差異。有沒有可能導致這種情況的重要事情?

編輯:這是弗洛伊德 - Warshall算法,我不認爲是竟被數據排序的問題。 Onlt我使用的map僅用於製作一個矩陣,其中包含2個節點之間的邊緣值信息。

+0

什麼算法? 「停止工作」是什麼意思? – user1810087

+0

這可能是因爲你的程序在某個時候調用了未定義的行爲,而這發生在幸運地用'map <,>'而不是'unordered_map <,>'來做你想要的。請發佈[MVCE](https://stackoverflow.com/help/mcve)。 – cdhowie

+0

Floyd-Warshall ..我不能釋放,這就是爲什麼我問是否有任何可能導致此問題的差異。我認爲應該沒有什麼區別。只有在時間複雜度爲 – scarface

回答

0

是的,unordered_map包含無序數據。所以如果你的算法需要有序的數據,alogirtm將會失敗。

1

取決於是什麼算法。 map會自動按鍵排序它的元素,而unordered_map不會打擾。

因此,您可能會發現即使它們中包含的數據相同,它的排列順序也不相同,並且會干擾您的結果。

map對於靜態數據是最好的,事實上,按鍵排序可以讓它更快地找到事物。但是排序會很費時,所以如果你需要map,但它會不斷修改,unordered_map可以成爲更快的選擇。

+0

已編輯 - >添加算法 – scarface

+0

@scarface發佈您的代碼。 – Havenard

+1

*「'map'對於靜態數據來說是最好的選擇,按鍵排序的事實使它能夠更快地找到事物。」*我對這一說法提出異議。 'map'中的查找具有O(log n)時間複雜度,而'unordered_map'中的查找具有平均O(1)時間複雜度。在牆上時間中實際上是否會比另一個更快取決於元素的數量,無序映射中的衝突數量以及應用程序的訪問模式。 – cdhowie

0

好的,所以 - 我的問題的答案是:mapunordered_map之間沒有任何其他根本區別。如果我不需要排序的數據,我只需更改mapunordered_map,一切都可以。

我認爲,除了排序後的數據之外,沒有這兩個問題。