我需要一个类似地图的数据结构(在 C++ 中)来存储具有以下功能的对(Key,T):
- 您可以将新元素 (Key,T) 插入到当前结构中
- 可以根据当前结构中的Key搜索元素
- 您可以制作当前版本结构的“快照”
- 您可以切换到您拍摄快照的结构版本之一,并从那里继续所有操作
- 完全删除其中一个版本
我不需要什么
- 从结构中移除元素
- 将不同版本的结构合并为一个
- 迭代当前存储在结构中的所有(或部分)元素
换句话说,您可以建立一些搜索结构,但在任何时候您都可以跳入历史,并以不同的方式扩展结构的早期/不同版本。稍后您可能会在这些不同的版本之间跳转。
在我的项目中,Key 和 T 可能是整数或指针值,而不是字符串。
主要目标是降低时间复杂度;空间消耗是次要的(但也应该是合理的)。为了澄清,对我来说 log(N)+log(S) (其中 N 个元素,S 个快照)就足够了,虽然更快更好:)
我对如何实现它有一些粗略的想法——例如:作为二叉搜索树的结构,插入新元素可以克隆从根到插入位置的路径,同时保持树的其余部分完好无损。切换树版本相当于选择不同版本的根节点,其中一些更改根本不可见。
然而,为了使这个自定义树高效(例如自平衡),它需要一些额外的努力和仔细的编码。当然我可以自己做,但也许已经有现有的库可以做到这一点?
此外,这种数据结构可能有一个我根本不知道的专有名称,这使得我的 Google 搜索(或 SO 搜索)完全失败......
谢谢您的帮助!