树视图的数据结构
data structure for treeview
我想实现一个"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覆盖,…这意味着当节点0崩溃时,std::map
中99000个值的键需要更新。这意味着在映射中进行99,000次删除和插入,否则键就无法更新。什么数据结构和/或容器将允许我更新映射树->列表更少的努力?
这看起来像是您可以使用增强树的东西。它将使更新这些键花费对数时间,并且按键查找也将花费对数时间。
不幸的是,我不能在这里写下一个完整的答案,现在我需要头,但希望这篇文章会有所帮助:http://je4d.blogspot.co.uk/2013/01/boostintrusive-annotated-trees-part-1.html
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- Qt 5.2模型视图模式:如何通知模型对象底层数据结构的变化
- 树视图的数据结构