既存のグラフに 1 つの頂点を追加した後で、VID (頂点 ID) を取得したいと考えています。現在、新しい頂点を追加した後に vertex_set を取得し、頂点セットの最後までループします (以前の頂点が削除された場合でも、これが常に最後に追加された頂点であると仮定しますか?)。セットの途中から頂点を削除しても VID が変更されるかどうかをテストする必要があります。しかし、これを行うためのより良い(より効率的な方法を読む)必要があると確信しています..以下のコードは、私が現在使用しているものです。
私はiGraphを初めて使用するので、助けていただければ幸いです。
// add into graph
igraph_integer_t t = 1;
if(igraph_add_vertices(user_graph, t, 0) != 0)
{
::MessageBoxW(NULL, L"Failed to add vertex to iGraph, vertex not added.", L"Network Model", MB_ICONSTOP);
return false;
}
/* get all verticies */
igraph_vs_t vertex_set;
igraph_vit_t vit;
igraph_integer_t vid = 0;
igraph_vs_all(&vertex_set);
igraph_vit_create(user_graph, vertex_set, &vit);
// must be a better way - look for starting from end.
while (!IGRAPH_VIT_END(vit))
{
vid = IGRAPH_VIT_GET(vit);
IGRAPH_VIT_NEXT(vit);
}
// add vid to vertex ca
ca->graphid = (int)vid;
// Add new vertex to local store
vm->CreateVertex(ca);
// cleanup
igraph_vit_destroy(&vit);
igraph_vs_destroy(&vertex_set);