2021-01-02

STL中的平衡二叉树(multiset)

运用场景:有时需要在大量增加,删除数据的同时,还要进行大量数据的查找

希望增加数据,删除数据,查找数据都能在log(n)复杂度完成。

排序+二分查找显然不可以,因加入新数据就需要重新排序

可以使用“排序二叉树”数据结构存放数据,体现在STL中,就是以下四种“排序他容器”

multiset set multimup map

multiset < T > st;

  • 定义了一个multiset变量st,st里面可以存放T类型的数据,并且能自动排序。开始st为空。
  • 排序规则:表达式“a
  • 可用st.insert添加元素,st.find 查找元素,st.erase删除元素,复杂度都是log(n)

用例:

#include 
#include 
#include //使用multiset和set需要此头文件
using namespace std;
int main()
{
    multiset st;
    int a[10]={1,14,12,13,7,13,21,19,8,8};
    for(int i=0;i<10;++i)
        st.insert(a[i]);//插入的是a[i]的复制品
    multiset::iterator i;//迭代器,近似指针
    for(i=st.begin();i!=st.end();++i)
        cout<<*i<<",";
    cout<

multiset上的迭代器

multiset < T> ::iterator p;

(p是一个变量名,可以随便换)

  • p是迭代器,相当于指针,可用于指向multiset中的元素。访问multiset中的元素要通过迭代器。

  • 与指针的不同

    multiset上的迭代器可++,–,用!=和==比较,不可比大小,不可加减整数,不可相减。

  • st.begin()返回值类型为multiset< T>::iterator,

    是指向st中的头一个元素的迭代器

  • st.end()返回值类型为multiset< T >::iterator,

    是指向st中的最后一个元素后面的迭代器

  • 对迭代器++,其就指向容器中下一个元素,–则令其指向上一个元素。

你可能感兴趣的:(C语言,数据结构,算法,stl)