具有boost :: graph的异构节点类型和边缘类型

时间:2015-02-23 18:41:42

标签: templates c++11 graph containers boost-graph

是否可以使用boost :: graph库来拥有多个节点类型和多种边缘类型(节点到边缘类型映射)?

(此问题与以下代码审核有关:code

2 个答案:

答案 0 :(得分:1)

在此处回答您的代码审核问题:

您的图表不是完全编译时的。

无论基础结构如何&#34;图表&#34;,请考虑像vertex v = add_vertex(graph)这样的函数。你可以用代码重载 traits<DataType>::vertex v = add_vertex(graph, data)其中add_vertex是模板。

对于相应的函数add_edge(s,t, graph, data);,您将需要更复杂的重载。

编译器没有办法想象会添加哪些顶点。这意味着某种类型的运行时调度是不可避免的。它可以是虚表多态,或Boost.Variant,或基于标志的天真变体,甚至是双重调度(也称为访客模式)。

答案 1 :(得分:1)

理论上你可以有一个图形,其中顶点类型是几种类型的Boost.Variant。同样,您也可以将边类型设为Boost.Variant。

但是,如果你想要最快的遍历,我建议保持顶点和边缘类型简单。相反,您可以将Boost.Variant用于边缘和顶点(捆绑)属性