小编AID*_*ubt的帖子

在现有数据结构(边和顶点作为 vector<Object *>)上使用 BGL 算法需要什么?

我有这样的自定义数据结构:

vector<myVertex *> my_vertices;
vector<myEdge *> my_edges;
Run Code Online (Sandbox Code Playgroud)

我的类 myEdge 有 source() 和 target() 方法,返回 myVertex*,所以它应该已经准备好了,对吧?

我需要做哪些外部调整才能将 BGL 图与我的容器一起使用?我知道文档的适配器示例,但非常感谢您的帮助!

我感兴趣的是纯粹的 adjacency_list 基本图类型,不确定我需要的图遍历概念。

到目前为止我对 adjacency_list 参数的理解:

adjacency_list<OutEdgeListS, VertexListS, DirectedS,
             VertexProperty, EdgeProperty, GraphProperty, EdgeListS>
Run Code Online (Sandbox Code Playgroud)
  • OutEdgeListSVertexListS是容器的选择器,用于表示(1)每个顶点的边列表,以及(2)顶点列表。这些容器分别作为元素 vertex_descriptoredge_descriptor。我的容器类型是简单的 std::vector,所以我想我不需要像 example/container_gen.cpp 那样创建新的容器类型。我必须简单地精确,可能使用 graph_traits,我的容器元素的类型是指向对象的指针。
  • VertexProperty并且EdgeProperty旨在用作附加信息的内部大容量存储,例如颜色标签、边缘权重……并且几年来提供捆绑属性功能。

我希望顶点和边描述符不是默认为整数,而是指向我的对象的指针。BGL 文档明确指出,这在本书的 2002 版12.1.2 中是可行

面向对象的图实现可能使用指向堆分配顶点对象的指针。对于图特征类,这些差异被顶点描述符关联类型隐藏。

虽然它似乎已经从当前的 1.70 在线文档中消失了。

理想情况下,我想像这样初始化:

MyGraph g(const& my_edges,const& my_vertices,
  undirected_tag, some_color, someweights, allow_parallel_edges_tag);
Run Code Online (Sandbox Code Playgroud)

PS我对在property_map中填充对象指针不感兴趣。我愿意不使用“默认 vecS”,这是一个 std::vector,其中描述符是一个整数。我愿意使用“自定义 vecS”作为对象指针的 std::vector …

c++ boost graph boost-graph

4
推荐指数
1
解决办法
308
查看次数

标签 统计

boost ×1

boost-graph ×1

c++ ×1

graph ×1