打印带有自定义顶点标签的助推图
Print boost graph with custom vertex label
我想打印一个具有自定义(字符串)顶点标签的Boost Graph,而不是默认的顶点编号标签0,1,2…
我已将图形初始化为:
typedef adjacency_list <vecS, vecS, directedS,
property<vertex_name_t,string>
> Graph;
Graph g;
set<string> names;
map<string,Graph::vertex_descriptor> vertex ;
for(auto it = names.begin() ; it != names.end(); ++it )
vertex[*it] = add_vertex(*it,g) ;
现在,我应该如何打印这个图,以便获得形式abc -> xyz;
的边,而不是1->2;
的边
您可以从顶点描述符中get
该名称,例如
graph_traits<Graph>::edge_iterator it, end;
for(tie(it, end) = edges(g); it != end; ++it)
std::cout << get(vertex_name, g)[source(*it, g)] << " -> "
<< get(vertex_name, g)[target(*it, g)] << 'n';
我不是一个真正精通BGL的用户,但我在您的方法中看到了一些问题:
1) 您似乎在声明内部属性vertex_name
,但随后使用外部存储set<string>
?
2) 独立于此,我没有看到任何代码真正填充名称,无论是内部还是外部,但我认为为了简洁起见,您只是省略了它。
但现在来看一个拟议的解决方案:BGL实际上提供了一种做你想做的事情的方法:boost::print_graph
:
using namespace boost;
typedef adjacency_list <vecS, vecS, directedS,
property<vertex_name_t,string>
> Graph;
Graph g;
std::set<string> names;
// somehow populating names here...
// creating the vertices and storing the names as internal properties
for(auto it = names.begin() ; it != names.end(); ++it )
{
auto v = add_vertex(g);
put(vertex_name,g,/*vertex descriptor*/ *v,/*vertex name*/ *it);
}
print_graph(g,get(vertex_name,g)); //NOTE: you could also use an external property map or an adaptor
相关文章:
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- C 和 C++ 中开关语句的案例标签的常量值,但显示不同的行为
- 如何正确指定 goto 语句的标签?
- 如何将一半传递给顶点着色器?
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 使用g++静态初始化带有命名标签的嵌套C++结构
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 通过水平滚动条更改标签
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 从 QFontDatabase 设置 QFont 将所有标签设置为等宽字体?Qt C++
- 在C++中存储要输入的标签列表
- 如何在等效列表中查找最小的连接标签
- 打印带有自定义顶点标签的助推图