使用 unordered_map 实现图形表示的邻接列表
using unordered_map to implement adjacency list for graph representation
我想使用 unordered_map 实现图形的邻接列表。选择unordered_map,因为它可以给我 O(1( 时间通过给定顶点访问相邻顶点。所以我的想法是定义unordered_map如下:
using namespace std;
class node {};
class edge {};
typedef vector<edge*> edges_t;
typedef unordered_map<node*, edges_t*> graph_t;
我使用类节点的指针作为unordered_map键,因为直接使用 node 对象需要自定义的 std::hash 实现。使用指针的主要问题是内存管理。我需要显式释放分配的内存。
unique_ptr可以在这里使用来简化内存管理吗? 或者任何更好的解决方案来建议?
谢谢!
所有权策略确实是一个问题,您有几种可能性:
- 如果存在明确的所有者,则
std::unique_ptr
是最佳选择(请参阅此示例( - 如果有多个可能的所有者,您可以打破对称性并引入一个,也可以推迟到
std::shared_ptr
(当心循环(
打破对称性可以像引入一个std::deque<node>
一样简单,该将包含节点并在该容器内获取指针。同样,std::deque<edge>
将解决边缘的所有权问题。
在最近的一个程序中,在我的 Graph 类中,我创建了一个名为 Map 的新数据类型,我将其定义为:
typedef unordered_map, VertexHash, VertexEquals> Map
其中顶点对象是节点;边对象是原点顶点、目标顶点和双倍距离;顶点哈希是一个类或结构,带有重载 ( ( 来散列顶点对象;和 VertexEquals 是一个类或结构,它确定是否两个 Verrte。对象与重载 == 相同。每个 Graph 对象都有一个包含顶点对象列表的向量和一个保存图形数据的 Map 变量。
相关文章:
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- 如何从图形的邻接列表表示中随机选择边缘
- 如何从LLVM的中间表示中获取在程序的每个函数中执行的函数调用列表
- 乘以两个表示为链接列表的大数字
- 拓扑形式的邻接列表表示
- 加权图的邻接列表表示
- 在C++中使用向量的向量(2D 向量)表示邻接列表
- 成员初始值设定项列表表示法:大括号与圆括号
- 图形的邻接列表表示形式不正确
- 邻接列表表示形式 C++,使用类和指针,指向无法正常工作的列表
- 使用c++向量的有向图的邻接列表表示
- WinDbg 表示在映像列表中找不到".dll"
- 列表或指针的问题,图的邻接表示
- C++指针、迭代器、图的邻接列表表示的问题
- 一个使用邻接列表表示为每个垂直线计算内度和外度的函数
- 如何在图的边列表表示中检测循环
- QListView或QListWidget中的Qt c++字体列表,并将它们表示为复选框
- c++中向量与列表的图形表示
- 确定由点列表表示的直线和等高线之间的交点