我正在寻找一个二维索引点的存储空间。更多 具体来说,我想在OpenStreetMap中存储方式(或边)的几何 并让它可搜索。对存储的查询将基于路径的两个端点查找几何。将运行此查询以重建找到的路径的几何 通过类似于Dijkstra的算法,因此几何查找的速度很重要。
我的案例中的节点只是无符号整数,几何可以编码为字符串或 作为点的向量,无论哪种方式都可行。
节点数量大约为10亿,因此保留内存中的所有内容都不起作用,因此找到基于外部或磁盘的存储将会很不错。
我已经尝试过Stxxl,但它似乎不支持非POD类型,如字符串或 矢量作为价值观。
提前感谢您的建议
答案 0 :(得分:0)
您可以通过维护两个单独的向量来模拟地图行为。比如说,您有两个<key, value>
对<0, "hello">
,<1, "world">
。然后第一个vector (of char)
包含,
h, e, l, l, o, \0, w, o, r, l, d, \0
第二个vector (of pair of two 'size_type's)
包含每个begin position
的{{1}}和one past end position
,
string
正如您所看到的,<0, 6>, <6, 12>
之后不需要"world"
。这样,对于任何新的"hello"
对,您只需更新第二个向量中的 开始和结束位置 (索引访问) ,并将值放在第一个向量的 结束 (无需转移)。
编辑:您可以使用<key, value>
代替vector (of pair of two 'size_type's)
,这可以弥补我猜的更好的解决方案。随便挑选。