boost::adjacency_list 如何在 remove_edge 之后保留有效的边描述符

Posted

技术标签:

【中文标题】boost::adjacency_list 如何在 remove_edge 之后保留有效的边描述符【英文标题】:How does boost::adjacency_list keep valid edge descriptors after remove_edge 【发布时间】:2015-07-30 14:43:24 【问题描述】:

我试图大致了解 boost 的 adjacency_list 是如何工作的,但不明白在使用 std::vectorEdgeList 时调用 remove_edge 后边缘描述符如何保持有效。

据我了解,顶点和边描述符都是邻接列表的中心顶点和边存储的索引(也是每个 std::vector)。当一条边被删除时,这不应该使存储中删除后的所有边的描述符(索引)无效吗?或者至少是从末端移动以填充间隙的边缘?

【问题讨论】:

【参考方案1】:

这里的部分答案:

执行 remove_edge(u, v, g) 将始终使 (u,v) 的任何边缘描述符或指向 (u,v) 的边缘迭代器无效,无论 adjacency_list 的种类如何。在这个迭代器和描述符失效的讨论中,我们只关心 remove_edge(u, v, g) 对指向其他边(不是 (u,v))的边描述符和迭代器的影响。

有关original documentation的更多信息。

【讨论】:

是的,这就是我困惑的表。 remove_edge 不会使顶点和边描述符无效。 remove_vertex 按预期使所有内容无效。 我在文档中找到了相关部分。我的猜测是其他边缘索引被交换为连贯。不过我不确定。

以上是关于boost::adjacency_list 如何在 remove_edge 之后保留有效的边描述符的主要内容,如果未能解决你的问题,请参考以下文章

使用Boost Graph库查找连接的组件,顶点和边缘类型为boost :: listS

使用捆绑属性创建 C++ Boost 图形

删除顶点并再次添加它会导致 boost::graph 崩溃?

以直接方式迭代提升图中的捆绑属性

通过与输入相同的提升图创建无向图

Boost Read_graphml没有正确读取xml它给出了所有顶点但它们都是空的