C中的等效LinkedHashmap?

新手上路,请多包涵

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

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

原文由 emadalamoudi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

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>>

原文由 Sergey Kalinichenko 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏