BGL(boost graph Library)(8-)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BGL(boost graph Library)(8-)相关的知识,希望对你有一定的参考价值。
参考技术A ch8介绍算法:搜索:bfs/dfs;最小生成树:最短路,网络流,最小割;ch9
属性映射,样例为dij算法的relax模板函数,需访问边的权重和定点的距离属性。get()接收distance或key对象并返回属性值。我们通常使用顶点作为键值。at()返回指向该属性的指针。property_traits类用于推导属性映射相关联的类型。键和值类型以及属性映射类别(可读写?)。
内部属性
从图中获取d和w的方法如下
通常属性包括distance,weight,color,顶点ID
调用方式可以说是非常费解了
distance_map把vertex_distance映射到了一个数组里,用途的顶点指针作为数组的偏移量。其他三个也一样,.使得它重新开始映射。
传参方式 //内心是崩溃的,这他妈在ch22好吗
不会直接用bgl_named_params类的,boost::weight_map这种格式会自动创建一个类似的
外部属性
两种方法,
第一种:使用适配器类:iterator_property_map;这个类装饰一个随机访问的迭代器,创建一个属性映射。迭代器指向实现属性值range的开始,range的长度是key对象的个数。
第二种:使用指针类型,当键类型可以做指针偏移量时。
构建自己的外部属性映射最多意味着重载put,get,operator[],此外,新的属性映射类将需要为property_traits中定义的所有类型嵌套typedef,也可以为新的属性映射类型创建property_traits的特化。
。。。
ch12 BG的接口:直接阅读即可
ch13属性映射库:首先我们都很了解它不属于BGL。但是一直在用它啊
Boost属性映射库主要由概念形式的接口规范组成(类似于STL [2]中的迭代器概念)。 这些接口规范旨在由通用库的实现者在向用户传达关于模板参数的要求时使用。 特别地,Boost属性映射概念定义了将关键对象映射到对应的值对象的通用接口,从而隐藏了如何从算法实现映射的细节。 实现属性映射界面的类型取决于提供的算法的客户端。 属性映射要求有意义地模糊键和值对象的类型,以允许通用库的函数模板中的最大的一致性。
干货全都在最后:
ch15访客概念
访客概念在BGL中与functor在STL中扮演着相同的角色。 functor提供一种扩展算法的机制; 用于定制算法的每个步骤所做的工作。 访问者允许用户在图形算法中在不同步骤插入自己的操作。 与STL算法不同,图形算法通常具有多个事件点,其中可能需要通过functor插入回调。 因此,访问者没有像functor那样的一个operator()方法,而是具有与各种事件点对应的几种方法。 每个算法都有一组不同的事件点,由以下访问者概念描述:
剩下的没什么难度了 自己查表
ch16事件游客列表适配器
EventVisitorList是EventVisitor或使用std :: pair组合的EventVisitors列表。 每个图形算法定义了将EventVisitorList转换为算法所需的特定类型的访问者的访问者适配器。 在下面的例子中,我们将展示如何使用std :: pair将事件访问者组合到列表中,以及如何使用算法的访问适配器类。
别看了意思很简单就是把一堆visitor用pair 封装成eventvisitorlist然后再封装成visitor
ch17事件游客
前缀记录:
前导边记录:
距离记录:
属性写入:
属性输出:
别的不重要了、
18 图类:
不看了 ndnSIM的全局拓扑图全部采用NdnGlobalRouterGraph
自定义了一个无向图类,保留了邻接表的绝大多数入口。
public内容有指向自ns3::ndn::GlobalRouter的指针Vertices和点&边的属性类型,构造函数把node和channel的对象从vector取出来push_back到list类型的成员函数里...是的list可以push_back ,只是到结尾而已。。
哎呀懵了好久,list里面的内容就是各种各样的Vertice。。。而他只是globalrouter()的指针。实际存的是node和channel的list!! 至于这两种类的对象是什么 见ns-3里他们各自的头文件 。
以下部分 按需查阅。。。
19 图适配器
20 迭代适配器
21 特征类
22 算法
23 图的输入输出
24 概念
25 To do list
26 问题
27 当前的BGL存在一些问题
28 FAQ
以上是关于BGL(boost graph Library)(8-)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Boost Graph [BGL] 检查在 add_edge 之前是不是已经存在顶点
如何使用 Boost Graph Library 创建 named_graph?
在 Boost Graph Library 中,为啥添加边会使边迭代器(和其他问题)无效?