我已经读过std map是使用二叉搜索树数据结构实现的 .
BST是一种顺序数据结构(类似于数组中的元素),它将元素存储在BST节点中并按顺序维护元素 . 对于例如如果element小于node,则将其存储在节点的左侧,如果它大于node,则将其存储在node的右侧 . 通过这种方法,我们实现了搜索,插入等各种操作的O(log n)复杂度 .
但是,std map是一个关联容器 . 我们有一个键和值插入 . 它是否真的使用BST实现,如果是,如何实现?在BST,我们没有任何关键或 Value . 它是一种标准容器 .
我有点困惑 . 请帮我澄清一下 . 它不影响我的工作,但我想更好地理解它们 . 谢谢你的帮助 .
2 回答
Map 中的节点通常看起来像这样:
如您所述,您对BST的工作原理有一般性的了解:
对于我的
node
结构,"element"是key
成员 . 因此,比较密钥以确定树的组织 . 's keys compare less than that of a parent node are placed on the left, and nodes who'的密钥比较右边的节点 .value
不参与树的组织,它只是补充数据 . 它只是通过成为同一结构的一部分而与键相关联 .C标准中没有任何内容规定应该如何实现
std::map
. 因此,std::map
的基础数据结构是实施者必须做出的决定 .但是,大多数实现都将
std::map
实现为红黑树 .