天天看點

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.思考

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