有一个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 是默认选择。
我正在使用 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 是默认选择。