【发布时间】:2014-05-08 11:43:29
【问题描述】:
在声明std::map<std::string, std::string> M 之后,可以:
- 写信给地图:
M["Jack"] = "323 Union St"; - 从地图读取:
std::cout << M["Jack"];
然而,在声明 boost::associative_property_map<std::map<std::string, std::string>> PM(M) 之后,我们只能做以下事情:
- 写信给属性图:
boost::put(PM, "Fred", "323 Union St"); - 从属性图中读取:
boost::get(PM, "Fred");
你可以用属性图做什么,而你已经不能用地图做了什么?
上下文
考虑某人为谁
#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
显然是错误的。 IIUC,从 1998 年到 2002 年,在整个 BGL 中大量使用属性映射,以消除为 MSVC 编写一个库和为 gcc 编写另一个库的需要。这个想法显然是 MSVC 将处理的内容,gcc 也将愉快地处理。既然 MSVC 处理了 C++98,那么属性映射是否仍然是必需的,或者它们只是一个遗物? 为什么?
【问题讨论】:
-
来自属性映射的 Boost 文档“对属性映射的需求源于 Boost 图形库的设计,其算法需要一个接口来访问附加到图形中的顶点和边的属性。在在这种情况下,顶点和边描述符是属性映射的关键类型。”好像和MSVC没什么关系。
标签: boost boost-graph