2012-06-24 77 views
0

我正在尋找一個存儲空間來索引2維的點。爲了更具體,我想在OpenStreetMap 中存儲方式(或邊)的幾何圖形,並讓它可搜索。對存儲器的查詢將基於方法的兩個端點查找幾何圖形。通過類似於Dijkstra的算法,將運行該查詢來重建找到的路徑的幾何圖形,因此幾何查找的速度很重要。stxxl地圖<int, string>

我的情況下的節點只是無符號整數,幾何可以編碼爲一個字符串或 作爲點的向量,任何一種方式都可以。

節點數量約爲10億個,因此將所有內容都保存在內存中不起作用,因此找到基於外部或磁盤的存儲器會很好。

我已經嘗試了Stxxl,但它似乎不支持非POD類型,如字符串或 向量作爲值。

感謝建議提前

回答

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每個string這樣的one past end position

<0, 6>, <6, 12> 

正如你所看到的,"world""hello"後它不是必需的。這樣,對於任何新<key, value>對,您只需更新第二向量(索引訪問)的開始和結束位置,你把價值在年底第一載體無需移位)。

編輯:而不是vector (of pair of two 'size_type's),你也可以使用map< int, pair<size_type, size_type> >,這彌補了我猜想的更好的解決方案。拿你的選擇。

相關問題