图形工具:如何维护一组有序的顶点?
graph-tool: How do I maintain an ordered set of vertices?
我正在使用图形工具在网络上工作。
在所有顶点的集合中,有一些特定的顶点组具有明确定义的顺序,我想跟踪这些顶点组。到目前为止,我一直在维护一个外部数据结构,其中以正确的顺序引用顶点。然而,当一个顶点被删除时,索引大于被删除的顶点的所有顶点都会被重新索引,这会破坏我一直保留在外部数据结构中的引用。
维护有序的顶点子集以使其在(例如)从图中删除第零个顶点时不会中断的正确方法是什么?
from graph_tool.all import *
graph = Graph(directed=False)
graph.add_vertex(5)
""" fifth_vertex is a reference to the vertex with an index of 5. """
fifth_vertex = graph.add_vertex()
assert graph.vertex_index[fifth_vertex] == 5
""" upon removal of a vertex at index i, all vertices of index > i are reindexed. fifth_vertex no longer references a vertex. """
graph.remove_vertex(graph.vertex(0))
""" assertion error """
assert fifth_vertex in graph.get_vertices()
顶点索引在图形工具中始终处于连续范围内。
要实现你想要的,你需要使用 属性 地图:
from graph_tool.all import *
g = Graph(directed=False)
g.add_vertex(6)
index = g.vertex_index.copy() # copies the vertex index as a stand-alone property map
g.remove_vertex(0)
v = find_vertex(g, index, 5)[0]
assert g.vertex_index[v] == 4
assert index[v] == 5
我正在使用图形工具在网络上工作。
在所有顶点的集合中,有一些特定的顶点组具有明确定义的顺序,我想跟踪这些顶点组。到目前为止,我一直在维护一个外部数据结构,其中以正确的顺序引用顶点。然而,当一个顶点被删除时,索引大于被删除的顶点的所有顶点都会被重新索引,这会破坏我一直保留在外部数据结构中的引用。
维护有序的顶点子集以使其在(例如)从图中删除第零个顶点时不会中断的正确方法是什么?
from graph_tool.all import *
graph = Graph(directed=False)
graph.add_vertex(5)
""" fifth_vertex is a reference to the vertex with an index of 5. """
fifth_vertex = graph.add_vertex()
assert graph.vertex_index[fifth_vertex] == 5
""" upon removal of a vertex at index i, all vertices of index > i are reindexed. fifth_vertex no longer references a vertex. """
graph.remove_vertex(graph.vertex(0))
""" assertion error """
assert fifth_vertex in graph.get_vertices()
顶点索引在图形工具中始终处于连续范围内。
要实现你想要的,你需要使用 属性 地图:
from graph_tool.all import *
g = Graph(directed=False)
g.add_vertex(6)
index = g.vertex_index.copy() # copies the vertex index as a stand-alone property map
g.remove_vertex(0)
v = find_vertex(g, index, 5)[0]
assert g.vertex_index[v] == 4
assert index[v] == 5