C ++ - 具有结构共享/不变性的类似地图的数据结构

时间:2013-02-03 18:33:31

标签: c++ data-structures

函数式编程语言通常用于不可变数据结构,但通过结构共享保持高效。例如。您处理某些信息地图,如果插入元素,则不会修改现有地图,但会创建新的更新版本。为避免大量复制和内存使用,映射将在两个实例之间共享(尽可能好)未更改的数据。

如果存在一些提供C ++数据结构等地图的模板库,我会感兴趣。我在LLVM的内部类旁边搜索了一下,什么都没发现。

2 个答案:

答案 0 :(得分:3)

Copy On Write b +树听起来就像你要找的那样。它基本上每次修改时都会创建一个新的快照,但它会在版本之间共享未修改的叶节点。我见过的大多数实现都倾向于只附加数据库日志文件。 CouchDB对它们有很好的写作。然而,就地图数据结构而言,它们“相对容易”实现。

答案 1 :(得分:0)

您可以使用普通地图,但使用时间戳或“地图版本号”标记每个元素。如果您也想删除元素,请使用两个标记。如果您可能重新插入已删除的元素,则需要每个元素的值列表和标记对。

例如,您搜索键“foo”,并且发现它在版本0到3(包含)中具有值5,然后它被“删除”,然后它在版本中具有值-8 9到当前。

但这会占用大量的记忆和时间。

相关问题