std map查詢效率優化

2021-06-26 06:59:13 字數 568 閱讀 4416

0.現狀,資料是個xml檔案,每個節點對應的結構體有10個成員變數,共有2000多條資料,用的std::map來儲存,用map的find函式進行搜尋時的效率極

其低下,迴圈搜尋30條資料竟然要20s+,搓死。

1.為什麼這麼慢?

最初懷疑是std::map的效率問題,正考慮是否使用std::hast_map來替換,於是了解下兩者之間的差別:

std::map是個自平衡的紅黑樹,他的效率是平均的

hash_map的是乙個hash表,只要你的hash演算法足夠唯一,你的效率可以達到o(1)

翻書時大牛就在旁邊,就問了他,把情況和他一說。他立刻點名:

用hash_map的效率確實會比map的高,但你的資料才2000多,兩者在這裡數量級上的效率差異應該很小。主要的問題應該在於你的map,你的map的value不是乙個指標

,而是乙個大結構體,這會導致搜尋時的記憶體頻繁被交換出去,因而導致效率低下。

2.按照大牛的建議,修改,測試,消耗的時間由原來的20s+變成了0

the end

使用 std map 查詢 IP 範圍

給定這樣乙個問題 有一組從ip範圍到地理位置資訊的資料,不同地點的ip範圍沒有重疊,實現從單個ip位址查到相應的地理位置。資料示例 這裡將只重點說明實現方式,具體為什麼這麼做,僅簡單介紹。std map 有三個不太常用的成員函式 iterator lower bound const key type...

使用 std map 查詢 IP 範圍

給定這樣乙個問題 有一組從ip範圍到地理位置資訊的資料,不同地點的ip範圍沒有重疊,實現從單個ip位址查到相應的地理位置。資料示例 view plain copy to clipboard print start end geo loc 1000 2000 北京 3000 3500 上海 4000 ...

資料庫優化查詢效率

1 儲存引擎選擇 如果資料表需要事務處理,應該考慮使用 innodb,因為它完全符合 acid 特性。如果不需要事務處理,使用預設儲存引擎 myisam 是比較明智的 2 分表分庫,主從。3 對查詢進行優化,要盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索 引 4...