簡體   English   中英

具有100.000個鍵的Vector的C ++ unordered_map

[英]C++ unordered_map of Vector with >100.000 Keys

我必須閱讀一個邊列表,其中包含100.000個頂點和約200.000個邊的形式:頂點A --->頂點B,成本X

我有一個帶有int鍵(頂點A)的unordered_map,並將鍵映射到Edges的向量,其中Edges包含頂點B和Cost X,如下所示: unordered_map<int, vector<Edge> > adjList填寫我的adjList是

(... read Vertex A, B and Cost X out of file...)
Edge e(Vertex B, Cost X) //create a new Object Edge
adj[Vertex A].push_back(e); //put it into the vector

用100.000個頂點和邊填充adjList需要很長時間,而我的VS性能分析器告訴我,unordered_map的operator []函數是我的瓶頸。 還有其他方法可以將我的數據放入unodre_map嗎? 甚至是用於此應用程序的其他數據結構?

謝謝

您可以按此順序嘗試以下操作。

  1. 確保您正在構建發布配置。 默認情況下,VS中的調試版本中STL集合的運行速度極慢。 您也可以對某些#defines進行相同操作。

  2. 如果您事先知道需要多少個元素,請在unordered_map上致電預留

  3. 可能很小,可能已由編譯器進行了優化,但仍然最好用使用vector :: emplace_back的單行替換兩行,以便在該矢量內創建一個新的Edge。

  4. 如果這還不夠,請轉到更好的哈希圖。 STL集合雖然易於使用,可移植且是標准的,但並不是特別快。 在Windows上,我建議使用CAtlMap ,它要快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM