📜  在 C++ STL 中使用向量创建平衡 BST(1)

📅  最后修改于: 2023-12-03 14:50:52.028000             🧑  作者: Mango

在 C++ STL 中使用向量创建平衡 BST

平衡二叉搜索树(Balanced Binary Search Tree,简称平衡 BST),是一种自平衡的二叉搜索树,它能够自动调整二叉树的结构,让整棵树保持平衡状态,从而提高搜索、插入、删除等操作的效率。在 C++ STL 中,使用 setmap 可以方便地创建平衡 BST,但是这种方法只能存储键值,无法存储其他的数据信息。本文将介绍如何使用向量创建平衡 BST,在保持平衡的同时存储其他数据信息。

定义结构体

首先,我们需要定义一个结构体,来存储我们要存储的数据信息。我们以一个整数和一个字符串为例,定义如下结构体:

struct Node {
    int value;
    string name;
    Node(int v, string n) : value(v), name(n) {}
};
定义比较函数

接下来,我们需要定义一个比较函数,用于比较结构体中的值大小。在 C++ STL 中,使用平衡 BST 存储结构体时,需要自定义比较函数。我们定义如下比较函数:

struct cmp {
    bool operator () (Node a, Node b) const {
        return a.value < b.value;
    }
};

该函数接收两个结构体,返回值为布尔类型,表示第一个结构体是否小于第二个结构体。在本例中,我们按照结构体中的整数值大小进行比较。

使用向量创建平衡 BST

现在,我们可以使用向量来创建平衡 BST 了。在 C++ STL 中,使用向量创建平衡 BST 的方法为:

  1. 定义一个向量
vector<Node> vec;
  1. 将数据插入向量
vec.push_back(Node(1, "Jim"));
vec.push_back(Node(3, "Tom"));
vec.push_back(Node(2, "Lily"));
vec.push_back(Node(4, "Lucy"));
vec.push_back(Node(5, "John"));
  1. 将向量转换成平衡 BST
set<Node, cmp> s(vec.begin(), vec.end());

以上代码就是使用向量创建平衡 BST 的完整过程。其中,set 是 C++ STL 中的一个模板类,表示集合(Set)。集合中的元素按照某个关键字(Key)自动排序,并且不允许重复元素。本例中,我们使用了自定义的比较函数 cmp,以 Node 结构体中的整数值大小来排序集合。set 中的 begin()end() 函数分别返回集合的首迭代器和尾迭代器。因此,使用 vec.begin()vec.end() 构造了一个包含向量所有元素的实例化对象。最后,将这个实例化对象作为参数传给 set 构造函数即可。

访问平衡 BST 中的元素

我们可以使用迭代器遍历访问平衡 BST 中的元素,也可以使用 find 函数查找特定元素。例如,根据结构体中的整数值查找对应的元素:

auto it = s.find(Node(3, ""));
if (it != s.end()) {
    cout << it->value << " " << it->name << endl;
}
总结

本文介绍了如何使用向量创建平衡 BST,并存储其他数据信息。为了实现这个过程,我们需要定义一个结构体存储数据信息,定义一个比较函数用于比较结构体中的值大小,最后使用向量和比较函数构造一个平衡 BST 对象。在访问平衡 BST 中的元素时,可以使用迭代器遍历访问或使用 find 函数查找特定元素。