我已经花了好几天的时间来使用 boost 图形库。据我了解,在考虑 VertexList 和 EdgeList 存储时:
vecS :
- 拥有索引,因此可以通过它进行访问
- 删除顶点时,迭代器失效
listS :
虽然有点短,但这正是我的问题的关键。我需要这些索引号,并且希望稍后能够轻松删除顶点。
我有一个具有此图形结构的工作算法:
typedef boost::adjacency_list<
boost::vecS, boost::vecS, boost::undirectedS,
topologicalmap::Intersection_Graph ,
boost::edge_weight_t,
boost::no_property > Graph_boost;
我有一个自定义结构Intersection_Graph
对于我需要使用的顶点。这里我使用vecS。
我想使用 listS 来删除顶点。另外,我希望稍后能够将其与 Dijkstra 算法一起使用。
我有点明白我需要有boost::vertex_index_t
在我的列表中,但我真的很困惑如何做到这一点并同时保留我的自定义结构。
我尝试了一些类似的事情:
typedef boost::adjacency_list<
boost::listS, boost::listS, boost::undirectedS,
boost::property<boost::vertex_index_t, topologicalmap::Intersection_Graph>,
boost::edge_weight_t,
boost::no_property > Graph_boost;
但我什至无法再访问我的自定义结构。另外,索引访问不起作用。
我确实需要索引访问功能,因为我的图所依赖的算法返回父节点的索引。我觉得我可以使用顶点而不是索引,但这意味着对代码的重大重写,我想知道是否可以避免它。
所以我的问题是:有没有办法让 listS 以类似 vecS 的方式运行,同时保持 listS 的优点?
如果这听起来很愚蠢,请耐心等待。我现在很困惑,所以我可能会说一些愚蠢的话。如果您需要更多信息,请询问。