给定定义:
typedef typename boost :: graph_traits :: adjacency_iterator adjacency_iter;
typedef typename boost :: inv_adjacency_iterator_generator :: type inv_adjacency_iter;
我对boost :: tie(i,end)= inv_adjacent_vertices((* start);
的语义感兴趣adjacent_vertices在inv_adjacent_vertices失败时工作正常,具有以下内容:
错误C2679:二进制'=':找不到运算符,它采用'const boost :: inv_adjacency_iterator'类型的右手操作数(或者没有可接受的转换)C:\ boost_1_33_1 \ boost \ tuple \ detail \ tuple_basic .hpp 637域名
Tuple_basic.hpp使用access_traits定义adjacency_iterator。
使用inv_adjacency_iterator_generator定义inv_adjacency_iterator ...
答案 0 :(得分:1)
首先定义一个in edge迭代器:
typedef typename boost::graph_traits<TGraphContainer>::in_edge_iterator TInEdgeIterator;
然后在inv_adjacency_iterator_generator中使用InEdge迭代器:
typedef typename boost::inv_adjacency_iterator_generator<TGraphContainer, TVertex, TInEdgeIterator>::type TInvAdjacencyIterator;
最后定义boost :: tie语法的顶点范围:
typedef std::pair<TInvAdjacencyIterator, TInvAdjacencyIterator> TInvAdjacencyVertexRangeType;