使用Boost Graph Library(BGL)表示类型层次结构

时间:2015-09-22 23:21:23

标签: c++ boost boost-graph

我是BGL的新手。

我试图沿着以下几行表示类型层次结构:

Number : terminal(double)
String : terminal(std::string)
Vec2
    x : Number
    y : Number
Circle
    position : Vec2
    radius : Number

我正在使用以下代码:

struct Descriptor { std::string name; };

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, Descriptor, Descriptor> Graph;

static inline void addVertex(Graph& g, const std::string& name)
{
    Graph::vertex_descriptor d = boost::add_vertex( g );
    g[ d ].name = name;
}

static inline void addEdge(Graph& g, const std::string& name, Index source, Index target)
{
    std::pair<Graph::edge_descriptor, bool> d = boost::add_edge( source, target, g );
    g[ d.first ].name = name;
}

...认为Vertex属性将识别“类型名称”(Number,String,Vec2和Circle)和Edge属性将识别化合物的“成员名称”(x,y,位置和半径)类型的组件。

我遇到的概念性问题是Vertex(例如Vec2)可以有两个具有相同类型的成员。在这样的模型中,可以为Vec2创建单独的边 - &gt;数字(x)和Vec2 - &gt;号(Y)?这是正确的方法吗?

最终,我希望能够遍历图形,这样如果我们从Circle开始,我们将访问(按顺序):position.x,position.y,radius。

感谢您的帮助!

0 个答案:

没有答案