繁体   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