我有一個Java程序,我想將其轉換爲C++。所以,在Java代碼中使用了一個Linkedhashmap
數據結構,我想將它轉換爲C++。在C++中是否有與LinkedHashmap
等效的數據類型?相當於C++中的LinkedHashmap?
我試過使用std::unordered_map
,但是它並沒有保持插入的順序。
我有一個Java程序,我想將其轉換爲C++。所以,在Java代碼中使用了一個Linkedhashmap
數據結構,我想將它轉換爲C++。在C++中是否有與LinkedHashmap
等效的數據類型?相當於C++中的LinkedHashmap?
我試過使用std::unordered_map
,但是它並沒有保持插入的順序。
C++不提供集合模板,其行爲將模仿Java的LinkedHashMap<K,V>
,因此您需要與映射分開維護順序。
這可以通過保持在std::list<std::pair<K,V>>
的數據,並且通過鍵保持一個單獨的std::unordered_map<k,std::list::iterator<std::pair<K,V>>>
地圖項目的快速查找來實現:
std::prev(list.end())
。std::list<std::pair<K,V>>
即可。謝謝,我認爲這是我需要做的。它會增加更多的複雜性,但至少它仍然會維持秩序。再次感謝 – emadalamoudi
由於這是可以接受的答案,我仍然發現有必要指出這比LinkedHashMap更糟糕:1)通過鍵2查找時的額外間接性)迭代器擦除所需的散列查找。其中條目包含兩個鏈接列表(插入順序和散列桶)的指針的集成解決方案既沒有這些缺點。有關係嗎?很難說/取決於。所提出的解決方案*嚴格地遜色於這樣的LinkedHashMap嗎?是。 – misberner
不,你沒有。這是一個醜陋的數據結構開始,難怪沒有人建議將其標準化 –
@DavidHaim嗯。那麼,我如何創建一個具有可預測的迭代順序的哈希映射? – emadalamoudi
你需要問自己,爲什麼在哈希表中的插入順序首先是重要的。 –