2009-10-22 100 views
4

我正在尋找一個容器,它提供了類似std :: map的接口,但是維護了插入元素的順序。由於地圖中的元素不會太多,因此查找性能不是一個大問題。 boost::unordered_map會在這種情況下工作嗎?即它保持插入的順序。我是新來的圖書館,因此想知道「無序」究竟意味着什麼?boost :: unordered_map維護插入順序?

+0

爲什麼不試試? :)實驗並沒有那麼糟糕。 – LiraNuna 2009-10-22 08:39:47

+0

你想要做什麼?檢查我對這個問題的答案,看看它是否適用:http://stackoverflow.com/questions/1570349/which-stl-container – 2009-10-22 08:42:14

+5

@LiraNuna:因爲這只是告訴你當前的實施行爲,而不是這是否這具體的行爲是必需的,可以依靠嗎? – sbi 2009-10-22 08:49:41

回答

9

unordered_map不保留插入順序。在這種情況下無序意味着元素的可觀察順序(即當你枚舉它們時)是未指定的和任意的。事實上,我認爲unordered_map中的元素順序可能會在地圖的生命週期中發生變化,這是由於重新調整地圖大小(雖然這取決於實現)

6

當我最後一次需要這個時候,我用了std::vector< std::pair<const Key, Value> >。我並不需要很多接口,所以我沒有打擾過,但是看起來應該相當簡單地在這個附近拍一個類似地圖的界面。

此外,請務必查看this question的答案。

17

閱讀關於Boost.Multiindex。它使您有機會創建一個容器,該容器既可以通過鍵(如std :: map)訪問數據,也可以按順序訪問數據(如std :: list)。

這是一個example