我在使用boost图中的in_degree函数时遇到了麻烦。它失败并带有以下隐藏信息:
.. \ boost_lib \ boost_1_66_0 \升压\图表\详细\ adjacency_list.hpp | 1673 |错误: 调用' in_edge_list没有匹配功能(图&,void *&)' |
为什么vb
的{{1}}类型?它应该是一个vertex_descriptor。
这是一个重现我的问题的小例子:
void*&
答案 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