首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >stxxl map<int,string>

stxxl map<int,string>
EN

Stack Overflow用户
提问于 2012-06-25 03:56:51
回答 1查看 254关注 0票数 0

我正在寻找一个存储索引点在2个维度。更具体地说,我希望将道路(或边)的几何图形存储在OpenStreetMap中,并使其可搜索。对存储的查询将基于一种方式的两个端点查找几何图形。运行此查询将重建由类似于Dijkstra的算法找到的路径的几何图形,因此几何图形查找的速度很重要。

在我的例子中,节点只是无符号整数,几何可以编码为字符串或点的向量,这两种方式都可以。

节点的数量约为10亿,因此将所有内容都保存在内存中是行不通的,因此最好能找到一个外部或基于磁盘的存储。

我已经尝试过Stxxl,但它似乎不支持像string或vectors这样的非POD类型作为值。

提前感谢您的建议

EN

回答 1

Stack Overflow用户

发布于 2012-09-04 19:09:54

您可以通过维护两个单独的向量来模拟类似贴图的行为。假设你有两个<key, value><0, "hello"><1, "world">。然后第一个vector (of char)包含,

代码语言:javascript
复制
h, e, l, l, o, \0, w, o, r, l, d, \0

第二个vector (of pair of two 'size_type's)包含每个stringbegin positionone past end position,如下所示:

代码语言:javascript
复制
<0, 6>, <6, 12>

正如您所看到的,并不要求在"hello"之后使用"world"。这样,对于任何新的<key, value>对,只需更新第二个向量中的开始和结束位置(索引访问),然后将该值放在第一个向量的 end 处(不需要移位)。

编辑:你也可以使用map< int, pair<size_type, size_type> >来代替vector (of pair of two 'size_type's),我想这是一个更好的解决方案。选你所选。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11180762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档