如何解决使用捆绑属性时获取特定顶点的BOOST方法?
@Sehe,我已经阅读了您一天的问题。我非常佩服您的努力。
但是我不明白Boost是否提供一种在使用捆绑属性时查找图的特定顶点的方法,而不是遍历图以查找所需的顶点。
我的图是这样定义的:
struct vertexData
{
int number;
std::string description;
};
typedef boost::adjacency_list<boost::listS,boost::listS,boost::undirectedS,vertexData>
adj_list_t;
以该示例为例,我想提供一个数字并获取与该数字关联的顶点描述符。
首先,我试图弄清楚如何使用boost::get
来完成任务,但是我意识到它可以做的就是获取property_map
。但是,当我可以简单地遍历图形并graph[v].number
来查找所需内容时,为什么还要使用它呢?它快得多吗?还是仅仅因为property_map
是获得基于模板的属性的唯一方法?
bundled properties page仅记录了调用算法时如何使用get
。
然后,我从您的答案中学到了关于动态特性的知识,但是找不到任何展示如何使用它们的东西,因为您只是在帮助人们使用graphviz和其他东西。
所以我进入read about bundled properties的Boost文档中,尽管不是我最初想要的东西,但我无法在他们的图表中使用他们的示例。
我无法编译它,因为我不知道如何正确设置associative_property_map
。
这就是我所拥有的:
adj_list_t graph;
boost::add_vertex(vertexData{30,"Anemia"},graph);
boost::add_vertex(vertexData{31,"Alzheimer"},graph);
boost::associative_property_map<adj_list_t>
description_map(graph);
boost::dynamic_properties dp;
dp.property("description",description_map);
std::cout << get("description",dp,30);
如果我对其进行更改以使其与文档和您的堆栈溢出答案最匹配,我就可以对其进行编译,但是它会因dynamic property get cannot retrieve value for property: description
而崩溃:
dp.property("number",get(&vertexData::number,graph));
dp.property("description",get(&vertexData::description,graph));
std::cout << get("description",30);
尽管如此,即使我能正常工作,这也不能解释原始问题,但它表明我们可以使用boost来获取基于另一个属性的属性,因此我应该能够使用boost来有意义获取基于属性的顶点描述符。
所有这些努力都基于这样一个假设:只要我想要一个顶点,并且想要学习boost和cpp,Boost的get就会比遍历图形更快。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。