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::vector
的 EdgeList
时调用 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