【发布时间】:2018-11-21 18:48:08
【问题描述】:
我正在寻找一些数据结构来在 C++ 中存储多图,但我想尽可能地利用 STL。目前我正在使用类似于单独链接哈希表的东西:std::map<int,std::vector<int>>。地图的键是顶点,值是std::vector<int>,其中包含与键形成边的所有不同顶点。
我主要对 O(1) 查找感兴趣,以查看一个顶点是否与另一个顶点共享一条边。由于这是一个未加权的多重图,因此顶点可以与另一个顶点共享多条边。
该图保证有欧拉回路和哈密顿回路,但我不确定这是否相关。
对于使用 STL 比 std::map<int,std::vector<int>> 更好的数据结构,你们有什么建议吗?
【问题讨论】:
-
std::map不提供O(1)查找,它具有O(logN)查找。您需要std::unordered_map进行O(1)查找。 -
就绝对速度而言,您无法击败邻接矩阵。
-
@NathanOliver 谢谢!
-
@n.m.如何将邻接矩阵用于多重图?如果它不是多图,我会使用一个。
-
我的第一个建议是寻找现有的图形库。记录,公开测试,可能已经优化。对于家庭项目,你说如果边是连接的,你主要想要快速查找,所以......你关心它是一个多重图吗?您可以忽略所有额外内容并使用 unordered_map
。我提到这个选项是因为多个边缘对于“是否存在边缘”并不重要。
标签: c++ data-structures graph