如何添加不同类型的属性映射?

时间:2013-02-05 12:01:25

标签: c++ oop c++11 dynamic-typing

这是一个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,可以从给定的默认参数中方便地推断出“节点映射”的类型T。节点映射本身可以是std::vector<T>,因为节点只是一个索引。

问题:我在哪里存储向量std::vector<std::string> map1std::vector<std::double> map2std::vector<Foo> map3 ....?

动态类型语言不会出现此问题。如何使用C ++实现此行为?

1 个答案:

答案 0 :(得分:2)

您可能需要查看Boost.Graph Library(BGL)

的属性映射
  

图与图的抽象数学性质之间的主要联系   他们习惯解决的具体问题是属性   附加到图形的顶点和边缘,类似于   距离,容量,重量,颜色等。有很多方法可以附加   根据数据结构实现来绘制图表的属性,但是   图算法不应该处理实现   属性的详细信息。定义的属性映射接口   Section Property Map Concepts提供了一种通用的访问方法   图表中的属性。这是BGL中使用的接口   算法来访问属性。