【问题标题】:why does qmap uses skiplist instead ob rb-tree?为什么qmap使用skiplist而不是ob rb-tree?
【发布时间】: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


【解决方案1】:

我曾经也认为 QMap 被设计为线程安全的,因此实现为基于跳过列表的字典。显然,这似乎不是原因。它更简单:“可执行文件中的代码更少,每个节点的内存更少。”

确实,QMap 曾经被实现为 RB-tree。

来源:Qt Quarterly 19, Section "Associative Containers"

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 2010-11-10
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2015-03-31
    • 2013-12-07
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多