C++ Set常用用法
生活随笔
收集整理的這篇文章主要介紹了
C++ Set常用用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
set集合容器:實現了紅黑樹的平衡二叉檢索樹的數據結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大于左子樹所有節點的鍵值,小于右子樹所有節點的鍵值;另外,還得保證根節點左子樹的高度與右子樹高度相等。
平衡二叉檢索樹使用中序遍歷算法,檢索效率高于vector、deque和list等容器,另外使用中序遍歷可將鍵值按照從小到大遍歷出來。
構造set集合主要目的是為了快速檢索,不可直接去修改鍵值。
常用操作:
1.元素插入:insert()
2.中序遍歷:類似vector遍歷(用迭代器)
3.反向遍歷:利用反向迭代器reverse_iterator。
?? ?例:
?? ?set<int> s;
?? ?......
?? ?set<int>::reverse_iterator rit;
?? ?for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素刪除:與插入一樣,可以高效的刪除,并自動調整使紅黑樹平衡。
?? ??? ??? ?set<int> s;
?? ??? ??? ?s.erase(2);?? ??? ?//刪除鍵值為2的元素
?? ??? ??? ?s.clear();
5.元素檢索:find(),若找到,返回該鍵值迭代器的位置,否則,返回最后一個元素后面一個位置。
?? ??? ??? ?set<int> s;
?? ??? ??? ?set<int>::iterator it;
?? ??? ??? ?it=s.find(5);?? ?//查找鍵值為5的元素
?? ??? ??? ?if(it!=s.end())?? ?//找到
?? ??? ??? ??? ?cout<<*it<<endl;
?? ??? ??? ?else?? ??? ??? ?//未找到
?? ??? ??? ??? ?cout<<"未找到";
6.自定義比較函數
?? ?(1)元素不是結構體:
?? ??? ?例:
?? ??? ?//自定義比較函數myComp,重載“()”操作符
?? ??? ?struct myComp
?? ??? ?{
?? ??? ??? ?bool operator()(const your_type &a,const your_type &b)
?? ??? ??? ?[
?? ??? ??? ??? ?return a.data-b.data>0;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<int,myComp>s;
?? ??? ?......
?? ??? ?set<int,myComp>::iterator it;
?? ?(2)如果元素是結構體,可以直接將比較函數寫在結構體內。
?? ??? ?例:
?? ??? ?struct Info
?? ??? ?{
?? ??? ??? ?string name;
?? ??? ??? ?float score;
?? ??? ??? ?//重載“<”操作符,自定義排序規則
?? ??? ??? ?bool operator < (const Info &a) const
?? ??? ??? ?{
?? ??? ??? ??? ?//按score從大到小排列
?? ??? ??? ??? ?return a.score<score;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<Info> s;
?? ??? ?......
?? ??? ?set<Info>::iterator it;
平衡二叉檢索樹使用中序遍歷算法,檢索效率高于vector、deque和list等容器,另外使用中序遍歷可將鍵值按照從小到大遍歷出來。
構造set集合主要目的是為了快速檢索,不可直接去修改鍵值。
常用操作:
1.元素插入:insert()
2.中序遍歷:類似vector遍歷(用迭代器)
3.反向遍歷:利用反向迭代器reverse_iterator。
?? ?例:
?? ?set<int> s;
?? ?......
?? ?set<int>::reverse_iterator rit;
?? ?for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素刪除:與插入一樣,可以高效的刪除,并自動調整使紅黑樹平衡。
?? ??? ??? ?set<int> s;
?? ??? ??? ?s.erase(2);?? ??? ?//刪除鍵值為2的元素
?? ??? ??? ?s.clear();
5.元素檢索:find(),若找到,返回該鍵值迭代器的位置,否則,返回最后一個元素后面一個位置。
?? ??? ??? ?set<int> s;
?? ??? ??? ?set<int>::iterator it;
?? ??? ??? ?it=s.find(5);?? ?//查找鍵值為5的元素
?? ??? ??? ?if(it!=s.end())?? ?//找到
?? ??? ??? ??? ?cout<<*it<<endl;
?? ??? ??? ?else?? ??? ??? ?//未找到
?? ??? ??? ??? ?cout<<"未找到";
6.自定義比較函數
?? ?(1)元素不是結構體:
?? ??? ?例:
?? ??? ?//自定義比較函數myComp,重載“()”操作符
?? ??? ?struct myComp
?? ??? ?{
?? ??? ??? ?bool operator()(const your_type &a,const your_type &b)
?? ??? ??? ?[
?? ??? ??? ??? ?return a.data-b.data>0;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<int,myComp>s;
?? ??? ?......
?? ??? ?set<int,myComp>::iterator it;
?? ?(2)如果元素是結構體,可以直接將比較函數寫在結構體內。
?? ??? ?例:
?? ??? ?struct Info
?? ??? ?{
?? ??? ??? ?string name;
?? ??? ??? ?float score;
?? ??? ??? ?//重載“<”操作符,自定義排序規則
?? ??? ??? ?bool operator < (const Info &a) const
?? ??? ??? ?{
?? ??? ??? ??? ?//按score從大到小排列
?? ??? ??? ??? ?return a.score<score;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<Info> s;
?? ??? ?......
?? ??? ?set<Info>::iterator it;
總結
以上是生活随笔為你收集整理的C++ Set常用用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯附加题
- 下一篇: s3c2440移植MQTT