做房地产的地图仍然是必要的BGL?(Do property maps remain necessar

2019-10-20 02:03发布

声明后std::map<std::string, std::string> M有可能:

  1. 写入图: M["Jack"] = "323 Union St";
  2. 阅读从地图: std::cout << M["Jack"];

然而宣布后boost::associative_property_map<std::map<std::string, std::string>> PM(M)我们无法做得更多,不:

  1. 写属性映射: boost::put(PM, "Fred", "323 Union St");
  2. 阅读距离酒店地图: boost::get(PM, "Fred");

你能有一个属性映射,你已经不能做一个地图呢?

上下文

考虑别人对他们来说,

#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300

明显是假的。 IIUC,属性映射使用如此巨资整个BGL 1998年至2002年,以消除需要编写一个MSVC库,另一个用于GCC。 这个想法显然是,什么MSVC会处理,GCC会很乐意也处理。 现在,MSVC处理C ++ 98,为物业地图仍然是必要的或者他们只是遗迹? 为什么呢?

Answer 1:

PropertyMaps在很大程度上是抽象出来的数据写入和读取,并通过该接口隐藏存储的实现。

你的接口有时需要访问数据,你不希望强制类型的存储在您的用户使用。 反之,你的某个时候提供数据存储,但要隐藏其实施。 在这两种情况下,属性映射提供了一个很好的解决方案,其标准库的AssociativeSequence要求确实不适合。



Answer 2:

下面是属性映射一些背景恭维PMR的答案。

正如我在注释中。 根据Boost文档( 房产地图图书馆 ):

“需要对属性映射出来Boost图库,其算法所需用于访问连接到在图中的顶点和边的属性的接口的设计的。在这方面,顶点和边缘的描述符是属性映射的键类型“。

他们是一个接口,基本上是PMR在说什么。

我没有找到有关MSVC的任何信息。

后来,在历史部分,他们说:

“属性映射接口起源在迪特马尔·库尔的硕士论文的通用图形算法,数据的存取方式,属性映射想法也出现了装饰的幌子下的通用图形组件库(GGCL),也就是现在的Boost图库的早期版本(BGL)。该属性映射接口的主要动机是支持与图的顶点和边相关联的数据的访问,虽然属性映射的适用性超出这个“。

您还可以看看迪特马尔·库尔的通用图形算法从施普林格(或谷歌的学者,点击“所有版本”来查找PDF)。



文章来源: Do property maps remain necessary for BGL?