我有一个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
你需要问自己,为什么在哈希表中的插入顺序首先是重要的。 –