微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用捆绑属性时获取特定顶点的BOOST方法?

如何解决使用捆绑属性时获取特定顶点的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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?