我应该使用boost :: property_map吗?

时间:2011-08-15 15:16:39

标签: c++ boost-graph

(对于标题道歉,我无法想出一个短于140个字符的好文章......)

我正在为boost :: graph库编写一个图算法。在我的算法中,我需要保留关于节点的变量,权重和计数器。就文档和查看其他人的代码而言,执行此操作的典型方法是将这些属性直接附加到图形并使用属性映射访问它们。

但是,在库函数中,我不希望将特定的读/写映射与图形捆绑在一起,因此我创建了自己的外部属性映射。但这些需要std::map(或等效),因此我最终创建了std::mapboost::associative_property_map<std::map>。关于这一点的好处是我有一个统一的方法来获取我的算法的属性和用户的属性(boost::get),但在不利方面,我似乎有两个冗余的地图。除了提到的均匀性之外,这样做有什么意义吗?我可以以某种方式让属性映射维护它自己的内部映射(我意识到内存中没有增益等,但是会有一个更少的成员变量来跟踪每个属性)?

1 个答案:

答案 0 :(得分:5)

简而言之,使用m创建地图pm和关联属性地图m,您将不会生成冗余。更多信息如下。

boost::associative_property_map不会创建新地图。它只引用另一个地图,并通过boost property_map API(get&amp; put)访问它。

请参阅记录的示例here

如果你去看看associative_property_map的构造函数,你会看到它引用了一个容器并将其地址存储为指针(m_c)。查看here并在文件中搜索“associative_property_map”。