有一个std::map 未订购

Having a std::map not order

我正在使用 header-only 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 在这里不是一个可行的解决方案,因为它也不会保留插入顺序。 "Unordered" 这里的意思是对任何排序都一无所知。

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

  • std::map 键更改为索引号或将 std::map 替换为 std::vector。后者实际上是有意义的,即使您想保留按对象名称搜索的能力,因为 JSON 对象不会变得太大,因此线性搜索可能不会引入任何明显的缺点。
  • 找到一种方法来单独存储所需的顺序。 std::vector 个键可以处理存储,并且您可以添加一些迭代器技巧以使您的容器在首选顺序上循环,例如通过重载 begin()end() 方法。
  • 使用多键映射作为现成的解决方案 - boost::multiindex 是默认选择。