如何通过名称获取id顶点?

时间:2012-05-07 15:42:44

标签: c++ c igraph

如果我想通过id顶点获取名称,我可以使用此函数:VAS(g, "name",id) 但如果我想要相反的方式,要通过名称获取id,我该怎么做?

2 个答案:

答案 0 :(得分:1)

igraph本身并没有提供一种按名称查找顶点的方法,并且有充分的理由 - 从名称到ID的映射比从ID到名称的映射更具挑战性,这是一个简单的数组查找操作。您可以迭代所有顶点并停在匹配的顶点,但这对于大图(顶点数中的O(n))来说效率很低。更快的方法是使用某种关联数组数据结构,例如@Jasc的答案中的dict,并使用名称作为键和ID作为值。 (如果你改变它,你需要保持这个索引与图形同步。)C,它自己或标准的C库没有提供这样的数据结构,但有许多实现可用,例如{{3在glib中找到。

答案 1 :(得分:0)

我在igrah网站或邮件列表中找到了以下内容。

g = igraph.Graph(0, directed=True)
g.add_vertices(2)
g.vs[0]["name"] = "Bob"
g.vs[1]["name"] = "Bill"
# build a dict for all vertices to lookup ids by name
name2id = dict((v, k) for k, v in enumerate(g.vs["name"]))
# access specific vertices like this:
id_bob = name2id["Bob"]
print(g.vs[id_bob]["name"])