拥有std ::地图不顺序

Having a std::map not order

本文关键字:顺序 地图 拥有 std      更新时间:2023-10-16

我使用的是仅标题JSON库,并且使用std::map。我希望不订购它。

https://github.com/nlohmann/json/blob/develop/src/json.hpp#l371

我想知道是否可以修复的片段。假设" ObjectType"是std::map。有什么方法可以从中删除订单或以某种方式使std::less<StringType>无关紧要。

似乎更改源来支持std::unordered_map的任务太大了。

首先,std::unordered_map在这里不是可行的解决方案,因为它也不会保留插入顺序。"无序"这里意味着对任何订购的意思。

对于您要以某种方式保存原始插入顺序的特定任务,因此有一些选择:

  • std::map键更改为索引号,或用std::vector替换std::map。即使您想保留按照对象名称搜索的能力,后者实际上也很有意义,因为JSON对象不会变得太大,因此线性搜索可能不会引入任何明显的缺点。
  • 找到一种单独存储所需订购的方法。键的std::vector可以处理存储空间,您可以添加一些迭代器骗局,以使您的容器周期通过首选订单,例如通过重载begin()end()方法。
  • 使用多键地图作为现成的解决方案-Boost :: MultiIndex是默认选择。