Я хотел бы получить VID (идентификатор вершины) после добавления одной вершины в существующий граф. В настоящее время я получаю 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);
Идентификаторы вершин (а также идентификаторы ребер) в igraph являются целыми числами от нуля до количества вершин / ребер минус один. Поэтому, если вы добавите новую вершину или ребро, ее идентификатор всегда будет равен количеству вершин / ребер до дополнение. Кроме того, если вы удалите некоторые ребра, идентификаторы существующих ребер будут переупорядочены, чтобы снова сделать диапазон идентификаторов ребер непрерывным. То же самое относится и к удалению вершин, и обратите внимание, что удаление некоторых вершин также перестроит идентификаторы ребер, если только удаленные вершины не были изолированы.
Других решений пока нет …