【发布时间】:2012-09-20 01:44:28
【问题描述】:
显然你可以做任何一个,但前者更常见。
为什么会选择后者,它是如何工作的?
我读到这个:http://www.drdobbs.com/cpp/stls-red-black-trees/184410531;这让我觉得他们做到了。它说:
insert_always 是一个状态变量,它告诉 rb_tree 是否允许同一键值的多个实例。此变量由构造函数设置,并由 STL 用于区分 set 和 multiset 以及 map 和 multimap。 set 和 map 只能出现一次特定键,而 multiset 和 multimap 可以出现多次。
虽然现在我认为这并不一定意味着。他们可能仍在使用容器。
我认为具有相同键的所有节点都必须排成一行,因为您必须将具有相同键的所有节点存储在右侧或左侧。所以如果你在右边存储相等的节点并插入 1000 个 1 和一个 2,你基本上就会有一个链表,这会破坏红黑树的属性。
我找不到太多关于它的原因是不是一个坏主意?
【问题讨论】:
-
我不认为排序的搜索树(和哈希)是为了支持重复键而设计的。它们的主要用例是唯一键。
-
我认为将它们存储为单个节点的原因之一是您可以更轻松地引用它们。我选择使用集合,现在我需要两个迭代器来引用一个键/值对。 (我正在写一个基于红黑树的多图)
标签: data-structures binary-search-tree multimap red-black-tree multiset