树视图的数据结构

时间:2013-03-27 07:48:08

标签: c++ data-structures

我想将“TreeView”实现为树到列表的可视化映射,列表中的缩进由映射节点的深度提供。我的具体问题是一个2层深的树,第一层有100 000个节点,每个节点包含20个节点(即100 000个文件夹,每个文件夹包含20个文件)。目前,我在std::map中维护树的映射,对于完全展开的树(“TreeView”中有2 000 000个可能可见的项目),它看起来像这样:

key  value
0    pointer to parent node 0
20   pointer to parent node 1
40   pointer to parent node 2
...

这意味着列表项[0,19]由父节点0覆盖,[20,39]由父节点1覆盖,...如果我折叠节点0,则需要更新映射:

key  value
0    pointer to parent node 0
1    pointer to parent node 1
21   pointer to parent node 2
...

此处,列表项0由父节点0覆盖,列表项[1,20]由父节点1覆盖,...这意味着std::map中99 000个值的键需要更新时折叠节点0.这意味着99000次删除和插入到地图中,否则无法更新密钥。什么数据结构和/或容器允许我更新映射树 - >列出更少的努力?

1 个答案:

答案 0 :(得分:2)

这看起来像你可以使用增强树。这将使更新这些键占用对数时间,按键查找也将是对数时间。

不幸的是,我不能在这里写一个完整的答案,因为我需要出去,但希望这篇文章会有所帮助:http://je4d.blogspot.co.uk/2013/01/boostintrusive-annotated-trees-part-1.html