2012-05-07 15 views
1

IDの頂点で名前を取得したい場合は、この関数を使用できます:VAS(g, "name",id) 逆の方法で名前を取得するにはどうしたらいいですか?IDの頂点を名前で取得する方法は?

+0

私は決して 'igraph'を使ったことはありませんが、もう誰も答えていないので、ドキュメンテーションの素早い確認の後、私は' VAS'がドキュメント内の頂点の属性を検索しますグラフ。あなたの質問は、特定の属性の特定の値を持つ頂点(または頂点)のIDを見つける方法であれば、グラフのすべての頂点を反復処理し、属性をチェックして一致する頂点のリストを累積することができます基準。 –

答えて

1

IGRAPHは、独自に、名前で頂点を検索するための手段を提供し、正当な理由はありません - 名前からIDへのマッピングは、IDからのマッピングよりも困難な問題である名前に、あります単純な配列検索操作です。すべての頂点を反復して一致する頂点で停止することはできますが、これは大きなグラフ(頂点の数ではO(n))では非効率的です。より速い方法は@ Jascの答えにdictのような何らかの連想配列データ構造を使用し、その名前をキーとIDの値として値として使用することです。 (このインデックスを変更すると、このインデックスをグラフと同期させておく必要があります)。C自体または標準のCライブラリにはこのようなデータ構造はありませんが、利用可能な実装が多数あります。例えば、GHash structure glib。

+0

+1;これはまさに私がigraphの著者の一人として書いたと思います。私はigraphのデフォルトの属性ハンドラを置き換えることが可能であるため、igraphのデフォルトの属性処理メカニズムを理論的に拡張することができるため、名前のIDへの逆マッピングを自動的に維持することができます。しかし、これはコアライブラリに実装されていません。 –

+0

あなたのコメントをありがとう、私はそれを試してみましょう – user1310873

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"]) 
+0

これはPythonのように見えますが、元のポスターは "C"または "C++"という質問にタグ付けされています – gcbenison

関連する問題