代码之家  ›  专栏  ›  技术社区  ›  Dat Chu

当graph VertexList=vecS时删除\u顶点

  •  6
  • Dat Chu  · 技术社区  · 14 年前

    我有一个顶点列表=vecS的Boost图。

    typedef adjacency_list <listS, vecS, undirectedS, TrackInformation, LinkInformation> TracksConnectionGraph;
    

    问题是每当我调用remove\u vertex时,图中顶点的迭代器以及顶点描述符都会失效。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Kirill V. Lyadvinsky    14 年前

    vecS 作为模板参数。看看Boost文档是怎么说的:

    VertexList adjacency_list 向量 ,则此操作将使图的所有顶点描述符、边描述符和迭代器无效<&燃气轮机;如果你需要经常使用 remove_vertex() 函数 listS 选择器是一个更好的选择 顶点列表 模板参数。

    万一 列表 remove_vertex 除非迭代器指向被移除的实际顶点。

        2
  •  3
  •   al.zatv    14 年前

    可能是,在迭代之前,您可以创建特殊的“垃圾”顶点,在迭代期间,您将要删除的所有节点连接到该垃圾顶点,并且在迭代之后,删除所有“垃圾连接”顶点?

        3
  •  3
  •   Tristram Gräbener    14 年前

    边存储在std::vector中。如果有N个顶点,则所有顶点都从0到N进行编号。如果删除一个顶点,则顶点将从o重新编号为N-1。因此,描述符将无效。

    从N向下迭代到0

    之后 你刚刚删除的那个。

    如果您经常进行这种操作,根据图形的大小,操作可能会非常慢。

    所以,对不起,没有真正的答案,但我希望你能设法从中得到一些东西。