首页 > 解决方案 > 使用自定义 get 属性提升动态属性

问题描述

我正在尝试将 boost::dynamic 属性用于 Graphviz 输出的多个属性。

我熟悉自定义属性编写器(如何在显示多个属性的 graphviz 中打印图形),但我正在尝试对动态属性做同样的事情。我们如何使用以下代码中的动态属性编写上述边缘属性编写器?我想写关于重量和容量值的 if else 语句,如 if(weight <5 && capacity <5) then color = red 等等。

boost::dynamic_properties dp/*(ignore_other_properties)*/;
dp.property("node_id", get(&vert::name, g));
dp.property("color", get(??,g));
write_graphviz_dp(std::cout, g, dp);

标签: c++boostboost-graph

解决方案


在此处查看一些选项:将 set/get 请求映射到 C++ 类/结构更改

您可以转换一个属性映射的结果,也可以完全使用功能属性映射。

转换值:

使用动态属性转换颜色属性的示例如下:Manually coloring of boost's graphs

功能图:

请注意,您还拥有make_constant_property_map(例如Boost Dynamic Properties with Custom get property


推荐阅读