C++ 任何stl::set实现都不使用红黑树吗?

C++ 任何stl::set实现都不使用红黑树吗?,c++,data-structures,stl,b-tree,red-black-tree,C++,Data Structures,Stl,B Tree,Red Black Tree,有没有人见过STL的实现,其中STL::set没有实现为红黑树 我问这个问题的原因是,在我的实验中,B-2B树的性能优于stl::set(和其他红黑树实现)由2到4的系数取决于B的值。我很好奇,当数据结构看起来更快时,是否有令人信服的理由使用红黑树。谷歌的一些人实际上构建了一个新的模型,他们似乎比标准的二叉树实现有更好的性能 不过,有一个陷阱。C++标准保证从映射或删除中删除元素只会使指向映射或集合中的同一元素的其他迭代器无效。对于基于B树的实现,由于节点拆分和合并,这些新结构上的擦除成员函数可

有没有人见过STL的实现,其中STL::set没有实现为红黑树


我问这个问题的原因是,在我的实验中,B-2B树的性能优于stl::set(和其他红黑树实现)由2到4的系数取决于B的值。我很好奇,当数据结构看起来更快时,是否有令人信服的理由使用红黑树。

谷歌的一些人实际上构建了一个新的模型,他们似乎比标准的二叉树实现有更好的性能

不过,有一个陷阱。C++标准保证从映射或删除中删除元素只会使指向映射或集合中的同一元素的其他迭代器无效。对于基于B树的实现,由于节点拆分和合并,这些新结构上的擦除成员函数可能会使树中其他元素的迭代器无效。因此,这些实现并不是标准实现的完美替代,也不能用于一致性实现

希望这有帮助

至少有基于AVL树而不是红黑树的


我没有尝试验证此实现的一致性,但至少(与基于B-树的实现不同),它至少可以被编写为完全符合标准的要求。

无论如何,我都不是算法专家,但
std::set
和朋友都有严格的最大复杂性(“大O”)标准规定的要求。一个替代的实现能满足所有这些要求吗?你可以看看这里:。@TristanBrindle:是的。B-2B树提供了相同的复杂性保证。(事实上,红黑树实际上是使用二叉树模拟2-3-4棵树;这使它们更复杂、更慢。)@davidhigh:我在搜索中确实看到了那个文档。它没有回答我的问题。它建议使用线性更新/搜索时间数据结构,而不是O(logn)时间结构。如果您不打算进行很多搜索或修改,那么这很好,但是stl::set仍然在stl.Aha中扮演着非常重要的角色。这就是我要找的。我想一定有陷阱。我没有意识到,当树中有其他迭代器时,标准允许对树进行修改。不过,这是一个相当非标准的用例。当它发生时,应该可以对其进行黑客攻击。阅读您所指的页面,我发现他们已经深思熟虑地提供了这样一种黑客攻击:我不确定AVL树是否可以<代码>插入和
擦除
在更改已知位置时需要摊销的恒定修改时间,AVL树不提供此功能。不幸的是,它是GNU GPL许可的。