2013-06-08 2 views
2

나는이BGL 에지 번들 속성

class cVertex { ... }; 
class eEdge { ... }; 
typedef boost::adjacency_list < 
    boost::vecS, boost::vecS, boost::undirectedS, 
    cVertex, cEdge > 
      graph_t; 
graph_t myGraph; 

처럼 번들 속성을 사용하여이 정점에 대해 잘 작동입니다. 나는 쉽게

const cVertex& v = myGraph[ *vertices(myGraph).first + idx ]; 

그러나, 같은 일이 가장자리를 위해 작동하지 않는 것 정점 번들 속성에 액세스하는 코드를 작성할 수 있습니다

const cEdge& e = myGraph[ *edges(myGraph).first + idx ]; 

내가 얻을이 컴파일러 오류

1>.\cGraph.cpp(109) : error C2678: binary '+' : 
no operator found which takes a left-hand operand of type 
'boost::detail::edge_desc_impl<Directed,Vertex>' 
(or there is no acceptable conversion) 

나는 또한 이것을 시도했다 :

정점 0

이 잘

boost::graph_traits<graph_t>::vertex_iterator vi = vertices(myGraph).first; 
vi += idx; 

작동하지만 내가이 해결

boost::graph_traits<graph_t>::edge_iterator ei = edges(myGraph).first; 

for(int k = 0; k < idx; k++) { 
    ei++; 
} 

그것을 발견

>C:\boost\boost_1_51\boost/iterator/iterator_adaptor.hpp(330) : 
error C3767: '+=': candidate function(s) not accessible 
1>  could be the friend function at 'C:\boost\boost_1_51\boost/graph/topology.hpp(63)' : 
'+=' [may be found via argument-dependent lookup] 
+0

왜 인덱스로 가장자리에 액세스하려고합니까? 이것이 문제입니다. 반복자와 반대되는 가장자리 설명자를 특정 단계만큼 진행할 방법이 없습니다. –

+0

그래서 나는 다음과 같은 질문에 답할 수 있습니다 : 15 번째 가장자리에 번들 속성 x의 값은 무엇입니까? 특히, 사용자에게 가장자리 속성 표를 제시하고 개별 가장자리 속성의 값을 변경할 수있게합니다. 테이블 위젯은 제 15 가장자리의 속성 값이 방금 변경되었음을 알려줍니다. – ravenspoint

+0

그런 경우, 가장자리 디스크립터를 포함하는 별도의 색인 화 가능 데이터 구조 (예 :'std :: vector')를 원할 수 있습니다. –

답변

0

오류를 다음 컴파일러 오류를

boost::graph_traits<graph_t>::edge_iterator ei = edges(myGraph).first; 
ei += idx; 

을 제공하다 나는 보인다. 이것은 필수적이라고 ncredible! 예레미야 Willcock에 의해 제안

이 코드는 반복자가 임의 여부에 대한 테스트의 추가와 함께, 실행 코드가 동일 실제로 (

boost::graph_traits<graph_t>::edge_iterator ei = edges(myGraph).first; 
std::advance(ei, idx); 

를 작성하여 간단하게보고 할 수있다 액세스 및 함수 호출 자체)

1

adjacency_list에는 그래프의 가장자리 벡터가 하나만 포함되어 있지 않지만 가장자리를 인접 목록으로 저장합니다. 즉, 각 꼭지점은 인접한 꼭지점 목록으로 자체 가장자리를 저장합니다.

그래프를 나타 내기 위해 많은 다른 데이터 구조가 있습니다 (예 : 가장자리에 직접 액세스 할 수 있도록 edge_list, adjacency_matrix 또는 압축 된 희소 행 그래프 (빠르고 읽기 전용 액세스 용).

가장자리에 직접 액세스 할 수있는 사용자 지정 (속성)지도를 만들어 문제를 해결할 수도 있어야합니다.

+0

답장을 보내 주셔서 감사합니다. 저는 2 년 동안이 일을하지 않았기 때문에 필요한 모든 관심을 당신의 대답에 줄 수는 없습니다. adjacency_list를 edge_list로 변경하면 에지에 대한 문제를 해결할 수 있지만 꼭지점에 대해 동일한 문제가 발생하지 않을까? 일반적으로 정점과 에지는 동일한 중요성을 갖습니다. – ravenspoint