2013-02-05 3 views
1

다음은 C++ (11) 디자인 문제입니다.다른 유형의 속성 맵을 추가하는 방법은 무엇입니까?

노드/에지를 임의의 속성에 매핑 할 수있는 그래프 데이터 구조를 만들고 싶습니다. (그래프와 관련이 없지만 속성이있는 요소의 컨테이너 일 수도 있습니다.) 예 :

이러한 데이터 구조를 사용하여 모든 노드에 대해 동적으로 새 속성을 추가 할 수 있습니다.

Graph G; 

G.addNodeMap("color", "white"); // map name, default value 

... 다음은 노드를 설정 :

node v; 
G.setAttr("color", v, "blue"); 
...

또한 메모리 저장 특성 제거 :

G.deleteNodeMap("color"); 

G.addNodeMap은지도 식별자 (가능한 문자열)와 항목의 기본값을 사용합니다. C++ 11에서는 "node map"유형 T을 기본 인수에서 유추 할 수 있습니다. 노드가 색인 일 뿐이므로 노드 맵 자체는 std::vector<T> 일 수 있습니다.

문제점 : 벡터를 어디에 저장합니까? std::vector<std::string> map1, std::vector<std::double> map2, std::vector<Foo> map3 ....?

이 문제는 동적으로 입력 된 언어에서는 발생하지 않습니다. 어떻게 C++로이 동작을 구현할 수 있습니까?

+0

일반적으로 임의 유형으로이 작업을 수행하는 것보다 훨씬 어려울 것입니다. 진지한 타입 소거가 필요합니다. –

+0

@ NicolBolas 그래서 이러한 속성을 저장하기위한 대안은 무엇입니까? – clstaudt

+0

현재 내 마음에 오는 유일한 것은 boost :: any입니다. – PlasmaHH

답변

2

당신은 Boost.Graph Library (BGL)의 속성 맵에서 살펴 봐야 할 수는

그래프의 추상적 인 수학적 특성과 그들이 해결하는 데 사용되는 구체적인 문제의 주요 링크는 호텔입니다 그 그래프의 꼭지점과 가장자리에 붙어 있습니다. 거리, 용량, 무게, 색상 등이 있습니다. 속성을 데이터 구조 구현 측면에서 그래프에 첨부하는 데는 여러 가지 방법이 있지만, 그래프 알고리즘에는 구현을 처리하기 위해 세부 정보 의. Section Property Map Concepts에 정의 된 속성 맵 인터페이스는 그래프에서 속성에 액세스하기위한 일반적인 방법을 제공합니다. 이 속성은 BGL 알고리즘에서 속성에 액세스하는 데 사용되는 인터페이스입니다.

관련 문제