boost.graph之属性

2024-09-06 06:36
文章标签 graph 属性 boost

本文主要是介绍boost.graph之属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关宏

BOOST_INSTALL_PROPERTY

#define BOOST_INSTALL_PROPERTY(KIND, NAME) \template <> struct property_kind<KIND##_##NAME##_t> { \typedef KIND##_property_tag type; \}

最终形式为

template <> 
struct property_kind<KIND_NAME_t> 
{typedef KIND_property_tag type;
}

是property_kind的模板特例化,看是点属性还是边属性

BOOST_DEF_PROPERTY

#define BOOST_DEF_PROPERTY(KIND, NAME) \enum KIND##_##NAME##_t { KIND##_##NAME }; \BOOST_INSTALL_PROPERTY(KIND, NAME)

最终形式为

enum KIND_NAME_T {KIND_NAME};
template <> 
struct property_kind<KIND_NAME_t> 
{typedef KIND_property_tag type;
}

定义边或者点的枚举,同时确定是边属性还是点属性

支持的点边属性

BOOST_INSTALL_PROPERTY(vertex, all);BOOST_INSTALL_PROPERTY(edge, all);BOOST_INSTALL_PROPERTY(graph, all);BOOST_DEF_PROPERTY(vertex, index);BOOST_DEF_PROPERTY(vertex, index1);BOOST_DEF_PROPERTY(vertex, index2);BOOST_DEF_PROPERTY(vertex, root);BOOST_DEF_PROPERTY(edge, index);BOOST_DEF_PROPERTY(edge, name);BOOST_DEF_PROPERTY(edge, weight);BOOST_DEF_PROPERTY(edge, weight2);BOOST_DEF_PROPERTY(edge, color);BOOST_DEF_PROPERTY(vertex, name);BOOST_DEF_PROPERTY(graph, name);BOOST_DEF_PROPERTY(vertex, distance);BOOST_DEF_PROPERTY(vertex, distance2);BOOST_DEF_PROPERTY(vertex, color);BOOST_DEF_PROPERTY(vertex, degree);BOOST_DEF_PROPERTY(vertex, in_degree);BOOST_DEF_PROPERTY(vertex, out_degree);BOOST_DEF_PROPERTY(vertex, current_degree);BOOST_DEF_PROPERTY(vertex, priority);BOOST_DEF_PROPERTY(vertex, discover_time);BOOST_DEF_PROPERTY(vertex, finish_time);BOOST_DEF_PROPERTY(vertex, predecessor);BOOST_DEF_PROPERTY(vertex, rank);BOOST_DEF_PROPERTY(vertex, centrality);BOOST_DEF_PROPERTY(vertex, lowpoint);BOOST_DEF_PROPERTY(vertex, potential);BOOST_DEF_PROPERTY(vertex, update);BOOST_DEF_PROPERTY(vertex, underlying);BOOST_DEF_PROPERTY(edge, reverse);BOOST_DEF_PROPERTY(edge, capacity);BOOST_DEF_PROPERTY(edge, flow);BOOST_DEF_PROPERTY(edge, residual_capacity);BOOST_DEF_PROPERTY(edge, centrality);BOOST_DEF_PROPERTY(edge, discover_time);BOOST_DEF_PROPERTY(edge, update);BOOST_DEF_PROPERTY(edge, finished);BOOST_DEF_PROPERTY(edge, underlying);BOOST_DEF_PROPERTY(graph, visitor);// These tags are used for property bundles// These three are defined in boost/pending/property.hppBOOST_INSTALL_PROPERTY(graph, bundle);BOOST_INSTALL_PROPERTY(vertex, bundle);BOOST_INSTALL_PROPERTY(edge, bundle);// These tags are used to denote the owners and local descriptors// for the vertices and edges of a distributed graph.BOOST_DEF_PROPERTY(vertex, global);BOOST_DEF_PROPERTY(vertex, owner);BOOST_DEF_PROPERTY(vertex, local);BOOST_DEF_PROPERTY(edge, global);BOOST_DEF_PROPERTY(edge, owner);BOOST_DEF_PROPERTY(edge, local);BOOST_DEF_PROPERTY(vertex, local_index);BOOST_DEF_PROPERTY(edge, local_index);

获取属性类型

property_kind_from_graph,其定义为

template <typename G, typename Tag>struct property_kind_from_graph: property_kind<Tag> {};

使用

get分发

通过判断属性是边属性还是点属性分发到具体的函数

template <class Config, class Base, class Property>inlinetypename boost::property_map<typename Config::graph_type, Property>::typeget(Property p, adj_list_helper<Config, Base>& g) {typedef typename detail::property_kind_from_graph<adj_list_helper<Config, Base>, Property>::type Kind;return detail::get_dispatch(g, p, Kind());}

如果是边属性,分发到

template <class Config, class Base, class Property>inlinetypename boost::property_map<typename Config::graph_type,Property>::typeget_dispatch(adj_list_helper<Config,Base>&, Property p,boost::edge_property_tag) {typedef typename Config::graph_type Graph;typedef typename boost::property_map<Graph, Property>::type PA;return PA(p);}

如果是点属性,分发到

template <class Config, class Base, class Property>inlinetypename boost::property_map<typename Config::graph_type,Property>::typeget_dispatch(adj_list_helper<Config,Base>& g, Property p,boost::vertex_property_tag) {typedef typename Config::graph_type Graph;typedef typename boost::property_map<Graph, Property>::type PA;return PA(&static_cast<Graph&>(g), p);}

property_map

根据属性看继承edge_property_map还是vertex_property_map

template <class Graph, class Property, class Enable = void>struct property_map:mpl::if_<is_same<typename detail::property_kind_from_graph<Graph, Property>::type, edge_property_tag>,detail::edge_property_map<Graph, Property>,detail::vertex_property_map<Graph, Property> >::type{};

这篇关于boost.graph之属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141274

相关文章

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.