【发布时间】:2012-09-22 04:46:46
【问题描述】:
我很奇怪为什么 QMap 是通过 skiplist 数据结构而不是 rb-tree 实现的? SO thread 有一个非常有趣的关于并发数据结构和跳过列表优于 rb-tree 的优点和缺点。它确实是非常有趣的对话,带有有用的链接,但 QMap 不是线程安全的,它不做任何互斥锁来同步访问开箱即用。它需要包装器或子类化。
对我来说,写“手工”跳过列表而不是 rb-tree 并不简单,所以这也不明显。
在非线程安全的 Qt 容器的上下文中是否有任何终止功能?
提前发送。
【问题讨论】:
-
我不同意。我从来不理解RB树。我发现跳过灯很容易理解和实现。使用 RB 树,您必须考虑许多不同的插入和删除情况,这种重新平衡的东西看起来像 PITA。我认为,除非您需要良好的最坏情况性能,否则跳过列表很好。
-
很多人,很多头脑。我不会打赌我会更快地编写 rb-tree 实现,然后有人会编写跳过列表,尤其是在 c++.yp 中,如您提到的某种 PITA。但是 rb-tree 是一个杰作的数据结构,恕我直言,QMap 应该是 Qt 的基本块之一:)
-
看来他们切换回版本5的rb-tree
标签: c++ qt red-black-tree skip-lists qmap