在C++中等效的LinkedHashmap?

ema*_*udi 10 c++ unordered-map linkedhashmap

我有一个Java程序,我想将其转换为C++.因此,LinkedhashmapJava代码中使用了一种数据结构,我想将其转换为C++.LinkedHashmapC++中是否有等效的数据类型?

我尝试使用std::unordered_map它,但它不保持插入的顺序.

das*_*ght 17

C++不提供具有模仿Java的行为的集合模板LinkedHashMap<K,V>,因此您需要与映射分开维护顺序.

这可以通过将数据保存在a中来实现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>>.

  • 由于这是公认的答案,我仍然发现有必要指出这比 LinkedHashMap 更糟糕:1)按键查找时的附加间接性 2)迭代器擦除所需的哈希查找。条目包含两个链表(插入顺序和哈希桶)的指针的集成解决方案没有这些缺点。有关系吗?很难说/取决于。提议的解决方案*严格* 不如这样的 LinkedHashMap 吗?是的。 (4认同)