4

(抱歉标题,我想不出一个短于 140 个字符的好标题...)

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

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

4

1 回答 1

5

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

boost::associative_property_map不创建新地图。它只引用另一个地图并使其可以通过 boost property_map API (get & put) 访问。

请参阅此处记录的示例。

如果您查看 associative_property_map 的构造函数,您会发现它需要一个容器的引用并将其地址存储为一个指针 (m_c)。查看此处并在文件中搜索“associative_property_map”。

于 2011-08-16T19:49:42.610 回答