[英]C++ Is there a way to initialize unordered_map using contents of vector as keys and custom values?
[英]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嗎? 甚至是用於此應用程序的其他數據結構?
謝謝
您可以按此順序嘗試以下操作。
確保您正在構建發布配置。 默認情況下,VS中的調試版本中STL集合的運行速度極慢。 您也可以對某些#defines進行相同操作。
如果您事先知道需要多少個元素,請在unordered_map上致電預留
可能很小,可能已由編譯器進行了優化,但仍然最好用使用vector :: emplace_back的單行替換兩行,以便在該矢量內創建一個新的Edge。
如果這還不夠,請轉到更好的哈希圖。 STL集合雖然易於使用,可移植且是標准的,但並不是特別快。 在Windows上,我建議使用CAtlMap ,它要快得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.