in_degree函数问题

时间:2018-03-09 21:17:04

标签: c++ boost graph boost-graph

我在使用boost图中的in_degree函数时遇到了麻烦。它失败并带有以下隐藏信息:

  

.. \ boost_lib \ boost_1_66_0 \升压\图表\详细\ adjacency_list.hpp | 1673 |错误:   调用' in_edge_list没有匹配功能(图&,void *&)' |

为什么vb的{​​{1}}类型?它应该是一个vertex_descriptor。

这是一个重现我的问题的小例子:

void*&

1 个答案:

答案 0 :(得分:2)

  

为什么vb为void *&类型?它应该是一个vertex_descriptor。

为什么该描述符不应该是void*类型?这正是它所定义的类型。

  

错误:没有匹配函数来调用' in_edge_list(图&,void *&)'

问题是,没有匹配的函数调用,因为in_degree()不适用于您的图形。您可以在此处查看图表支持的内容:http://www.boost.org/doc/libs/1_66_0/libs/graph/doc/graph_concepts.html

正如您所看到的,in_degree()需要BidirectionalGraph概念。

只要知道学位,你就会感到满意:

std::cout << boost::out_degree(*vb, g);

或者您可以切换到BidirectionalGraph模型:

<强> Live On Coliru

#include <iostream>
#include <string>

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_traits.hpp>

typedef boost::adjacency_list<boost::setS, boost::setS, boost::bidirectionalS> graph;
typedef graph::vertex_descriptor Vertex;

int main() {
    graph g(1);

    boost::graph_traits<graph>::vertex_iterator vb, ve;
    boost::tie(vb, ve) = boost::vertices(g);

    std::cout << boost::out_degree(*vb, g) << std::endl;
    std::cout << boost::in_degree(*vb, g) << std::endl;
}

打印

0
0