c++ - 我应该使用 boost::property_map 吗?

标签 c++ boost-graph

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

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

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

最佳答案

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

boost::associative_property_map 不会创建新 map 。它仅引用另一个 map 并使其可通过 boost property_map API(获取和放置)访问。

参见文档示例 here .

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

关于c++ - 我应该使用 boost::property_map 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7066723/

相关文章:

c++ - boost::asio async_read_some 示例代码未读取套接字中的所有数据

c++ - 如何在Windows上获取可用的RAM?

c++ - 为什么 while(scanf ("%lld", &num) == 1) 比 while(scanf ("%lld", &num)) 快

c++ - 原始类型初始化的构造函数语法和赋值语法之间的差异

c++ - 使用捆绑属性作为 dijkstra_shortest_paths 中的权重图

c++ - 对重载赋值运算符的结果是否为左值感到困惑

c++ - boost::copy_graph 的vertex_copy 是如何工作的?

c++ - 在 boost 图库中为深度优先搜索提供颜色图时遇到问题

c++ - 忽略零权重边的 Boost 图 BFS