다음은 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++로이 동작을 구현할 수 있습니까?
는
일반적으로 임의 유형으로이 작업을 수행하는 것보다 훨씬 어려울 것입니다. 진지한 타입 소거가 필요합니다. –
@ NicolBolas 그래서 이러한 속성을 저장하기위한 대안은 무엇입니까? – clstaudt
현재 내 마음에 오는 유일한 것은 boost :: any입니다. – PlasmaHH