如何在c++中使用igraph_add_vertices添加顶点后获得igraph顶点id
How to get igraph vertex id after adding vertex using igraph_add_vertices in c++
我想获得VID(顶点ID)后,我已经添加了一个单一的顶点到现有的图。在添加新顶点后,我当前获得一个vertex_set,并循环到顶点集的末尾(假设这总是最后添加的顶点,即使在先前的一个被删除的情况下?)。我需要测试从集合中间删除一个顶点是否仍然会改变视频。但我确信一定有更好的(更有效的)方法来做这件事。下面的代码是我目前使用的。
感谢任何帮助,因为我是一个新的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中的顶点id(以及边id)是从0到顶点/边的数量减1的整数。因此,如果你添加一个新的顶点或边,它的ID将总是等于之前的顶点/边的数量。另外,如果删除一些边,现有边的ID将被重新排列,使边的ID范围再次连续。同样适用于删除顶点,并注意,删除一些顶点也会重新排列边缘id,除非删除的顶点是隔离的。
相关文章:
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何将一半传递给顶点着色器?
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- OpenGL 相机移动程序顶点着色器问题
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 为什么顶点数组对象会导致错误?
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 将顶点位置从顶点传递到片段着色器 - 仅在使用 Nsight 进行调试时有效
- FBX SDK 在预期 3 个顶点时返回 4 个顶点
- 如何在c++中使用igraph_add_vertices添加顶点后获得igraph顶点id