如果我有使用类CElement定义的n个元素,那么如何使用boost图创建这些元素的顶点 - 并将它们连接起来?我见过提升图捆绑道具,但我无法想象这一个.
我正在尝试从专有图库迁移到开源图库.
编辑:因为很少有人知道Boost Graph是如何工作的,如果你可以使用LEMON Graph Library提供解决方案,那也没关系.
目前,我的顶点具有类型,Graph_Vertex*并且可以具有void*用于存储相关信息的关联指针.对于类型的边缘使用类似的逻辑Graph_Edge*.我使用void*指针来存储我自己的结构Node_State,这是这样的
struct Node_State {
std::string name;
int id;
// other stuff
};
Run Code Online (Sandbox Code Playgroud)
从我看到的BGL到现在,我可以使用adjacency_list结构和捆绑属性创建一个图表指向我的Node_State.然后,我将使用整数顶点索引,而不是使用顶点指针.
我一直在寻找的教程和一些问题 在这里,这似乎是可能的.我在想类似的东西
typedef adjacency_list < listS, vecS, bidirectionalS, Node_State> gr;
Run Code Online (Sandbox Code Playgroud)
我会不时地从顶点移除所有边缘.非常不常见,我也可能删除一个节点.这就是我选择的原因listS, vecS.
我想很容易为无向边创建这个结构的第二个版本.我不确定这是否bidirectionalS是我案件的最佳选择.在这方面,您的意见是值得赞赏的.
但是还有另一个问题.现在,我可以使用外部地图按名称或使用唯一的整数id查找每个顶点.
std::map<int, Graph_Vertex*> nodes_by_id;
std::map<std::string, Graph_Vertex*> nodes_by_name();
Run Code Online (Sandbox Code Playgroud)
如果我删除一个顶点,我只需要删除地图中相应的条目,并且事情继续有效.
根据我的理解,使用BGL实现这一点并不容易,因为删除顶点会触发使用更高ID 重新编号所有顶点,并且还可能导致内部结构的重新分配.再见ids和再见指针.
主要问题. …