std :: map和二叉搜索树

时间:2014-08-24 02:28:57

标签: c++ data-structures stl binary-search-tree

我已经读过std map是使用二叉搜索树数据结构实现的。

BST是一种顺序数据结构(类似于数组中的元素),它将元素存储在BST节点中并按顺序维护元素。对于例如如果element小于node,则将其存储在节点的左侧,如果它大于node,则将其存储在node的右侧。通过这种方法,我们可以实现搜索,插入等各种操作的O(log n)复杂度。

但是,std map是一个关联容器。我们有一个键和值插入。它是否真的使用BST实现,如果是,如何实现?在BST,我们没有任何关键或价值。它是一种标准容器。

我很困惑。请帮我澄清一下。它不影响我的工作,但我想更好地理解它们。谢谢你的帮助。

2 个答案:

答案 0 :(得分:11)

地图中的节点通常如下所示:

struct node
{
    node* left;
    node* right;

    Key_type key;
    Value_type value;
};

如您所述,您对BST的工作原理有一般性的了解:

  

如果element小于node,则将其存储在节点的左侧,如果它大于node,则将其存储在节点的右侧。

对于我的node结构,"元素"是key成员。因此,比较密钥以确定树的组织。键的比较小于父节点的节点的节点位于左侧,而节点的键比较大的节点位于右侧。 value不参与树的组织,它只是补充数据。它只是通过成为同一结构的一部分与关键字相关联。

答案 1 :(得分:1)

C ++标准中没有任何内容规定应如何实现std::map。因此,std::map的基础数据结构是实施者必须做出的决定。

然而,大多数实现都将std::map实现为红黑树。