我正在寻找一个存储索引点在2个维度。更具体地说,我希望将道路(或边)的几何图形存储在OpenStreetMap中,并使其可搜索。对存储的查询将基于一种方式的两个端点查找几何图形。运行此查询将重建由类似于Dijkstra的算法找到的路径的几何图形,因此几何图形查找的速度很重要。
在我的例子中,节点只是无符号整数,几何可以编码为字符串或点的向量,这两种方式都可以。
节点的数量约为10亿,因此将所有内容都保存在内存中是行不通的,因此最好能找到一个外部或基于磁盘的存储。
我已经尝试过Stxxl,但它似乎不支持像string或vectors这样的非POD类型作为值。
提前感谢您的建议
发布于 2012-09-04 19:09:54
您可以通过维护两个单独的向量来模拟类似贴图的行为。假设你有两个<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)包含每个string的begin position和one past end position,如下所示:
<0, 6>, <6, 12>正如您所看到的,并不要求在"hello"之后使用"world"。这样,对于任何新的<key, value>对,只需更新第二个向量中的开始和结束位置(索引访问),然后将该值放在第一个向量的 end 处(不需要移位)。
编辑:你也可以使用map< int, pair<size_type, size_type> >来代替vector (of pair of two 'size_type's),我想这是一个更好的解决方案。选你所选。
https://stackoverflow.com/questions/11180762
复制相似问题