天天看点

C++ set集合容器用法解析

1.简介

  set是C++STL库中的一个容器,他十分的便利,所有的元素插入时都会被自动排序,并且容器内保证元素不重复,就想高一数学中讲的集合具有互异性一样,(好像set本来就叫集合容器 bushi)

2.本质

  set属于关联式容器,使用类似书的结构(基于红黑树的平衡二叉检索树)如图:

C++ set集合容器用法解析

3.用处

  构造set的主要目的就是为了快速检索和去重(检索的时间复杂度为O(logN));

4.set容器的使用

  主要的函数如下:

    insert() set容器唯一的插入数据的方式;

    用法:  

1 set<int> s;
2 s.insert(1);       

    size() 判断容器中的元素数目;

    用法: 

1 set<int> s;
2 for (int i=1;i<3;i++)
3     s.insert(i);
4 s.size();       

    empty() 判断容器是否为空;

    用法: 

1 set<int> s;
2 if(s.empty()){
3     break;
4 {       

    erase(pos) 删除迭代器所指的元素,并返回下一个元素的迭代器;

    用法:

1 set<int> s;
2 s.erase(s.begin());       

     find(key) 查找key这一元素书否存在,若存在,则返回该贱键的元素的迭代器,否则,则返回set.end();

     用法:

1 set<int> s;
2 for (int i=1;i<=5;i++){
3     s.insert(i);
4 }
5 set<int>::iterator ii;
6 ii = s.find(2);
7 if (ii != s.end())
8     cout<<*ii<<endl;      

    count(key) 检索容器中key的元素个数,但刚才都说了元素插入set后会自动去重,所以返回的值只有0或1罢了( 

    另外,set容器本质是棵二叉树,所以检索的时间复杂度只有O(logN),比STL里的其他容器快好多。

    用法:

cout<<s.count(1)<<endl;       

5.迭代器

  访问set集合容器中的元素,需要通过迭代器进行,他类似于指针,可以通过他来指向set中的某一元素的地址。例如:

set<int>::iterator ii;       

  就定义了一个set<int>类型的正向迭代器 ii。

  迭代器分正向迭代器和反向迭代器,顾名思义,就是正向遍历和反向遍历的意思。

6.思考

   自己找题吧,我找不到了(