异构节点类型和边缘类型,带 boost::graph



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

(这个问题与以下代码审查有关:代码(

在这里回答您的代码审查问题:

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

不管底层结构"图"如何,想想像vertex v = add_vertex(graph)这样的函数。您可能会使用诸如 traits<DataType>::vertex v = add_vertex(graph, data) add_vertex是模板。

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

编译器无法设想将添加哪些顶点。这意味着某种类型的运行时调度是不可避免的。它可以是虚拟表多态性,或 Boost.Variant,或基于标志的朴素变体,甚至是双重调度(又名访客模式(。

理论上,

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

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

相关内容

最新更新