在许多编译器中,Set
,Map
和Multimap
之类的标准数据结构在后面使用了Red-Black-Trees,而multimap
存储了多个和重复的键。
我对以下引用有疑问:
“红黑树唯一地存储密钥,只绑定一个DataValue 每个键“
multimap
(如C ++ STL那样)?答案 0 :(得分:5)
1)不,不是真的。
2)修改单个映射红黑树以将键映射到多个值将是微不足道的。它只需要使用第二个数据结构和映射键 - >集合。
例如,您可以从字符串映射到int的向量,而不是从字符串映射到int。或者是一个链接的整数列表的字符串。或者是单映射RBT的字符串。所以:)。
重新审视#1:从技术上讲,仍然会将一个键映射到单个值,只是该值不是直接映射的类型。根据你认为的“DataValue”,然后是,声明是真的。
此外,辅助数据结构实际上并不是必需的;它只是简化了遍历。基本上为了适应重复,而不是严格小于/大于父/左和父/右之间的关系,你有一个方面也包括相等。
例如:
5
3 7
3
答案 1 :(得分:3)
允许节点两侧的子节点包含既不小于父节点也不大于父节点的键。你需要允许双方平等,否则你可能会失去平衡 - 由n个相等的键组成的树将具有高度n。