set 用法
++ Set常用用法
2013-04-22 19:24?86508人閱讀?評論(1)?收藏?舉報 ?分類: CPlus(54)? 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; c++ stl集合set介紹 c++ stl集合(Set)是一種包含已排序對象的關聯容器。set/multiset會根據待定的排序準則,自動將元素排序。兩者不同在于前者不允許元素重復,而后者允許。1) 不能直接改變元素值,因為那樣會打亂原...
?
c++ stl集合set介紹
? ?c++ stl集合(Set)是一種包含已排序對象的關聯容器。set/multiset會根據待定的排序準則,自動將元素排序。兩者不同在于前者不允許元素重復,而后者允許。
1) 不能直接改變元素值,因為那樣會打亂原本正確的順序,要改變元素值必須先刪除舊元素,則插入新元素
2) 不提供直接存取元素的任何操作函數,只能通過迭代器進行間接存取,而且從迭代器角度來看,元素值是常數
3) 元素比較動作只能用于型別相同的容器(即元素和排序準則必須相同)
set模板原型://Key為元素(鍵值)類型
template?<class?Key,?class?Compare=less<Key>,?class?Alloc=STL_DEFAULT_ALLOCATOR(Key)?>從原型可以看出,可以看出比較函數對象及內存分配器采用的是默認參數,因此如果未指定,它們將采用系統默認方式。
 
set的各成員函數列表如下:
c++ stl容器set成員函數:begin()--返回指向第一個元素的迭代器
c++ stl容器set成員函數:clear()--清除所有元素
c++ stl容器set成員函數:count()--返回某個值元素的個數
c++ stl容器set成員函數:empty()--如果集合為空,返回true
c++ stl容器set成員函數:end()--返回指向最后一個元素的迭代器
c++ stl容器set成員函數:equal_range()--返回集合中與給定值相等的上下限的兩個迭代器
c++ stl容器set成員函數:erase()--刪除集合中的元素
c++ stl容器set成員函數:find()--返回一個指向被查找到元素的迭代器
c++ stl容器set成員函數:get_allocator()--返回集合的分配器
c++ stl容器set成員函數:insert()--在集合中插入元素
c++ stl容器set成員函數:lower_bound()--返回指向大于(或等于)某值的第一個元素的迭代器
c++ stl容器set成員函數:key_comp()--返回一個用于元素間值比較的函數
c++ stl容器set成員函數:max_size()--返回集合能容納的元素的最大限值
c++ stl容器set成員函數:rbegin()--返回指向集合中最后一個元素的反向迭代器
c++ stl容器set成員函數:rend()--返回指向集合中第一個元素的反向迭代器
c++ stl容器set成員函數:size()--集合中元素的數目
c++ stl容器set成員函數:swap()--交換兩個集合變量
c++ stl容器set成員函數:upper_bound()--返回大于某個值元素的迭代器
c++ stl容器set成員函數:value_comp()--返回一個用于比較元素間的值的函數
 
c++ stl集合set插入,遍歷用法舉例
#include<iostream>? #include<set>? using?namespace?std;? //set插入元素操作?? int?main()? {?//定義一個int型集合對象s,當前沒有任何元素.由www.169it.com搜集整理set<int>?s;?s.insert(8);??//第一次插入8,可以插入??s.insert(1);?s.insert(12);?s.insert(6);?s.insert(8);???//第二次插入8,重復元素,不會插入??set<int>::iterator?it;?//定義前向迭代器?//中序遍歷集合中的所有元素??for(it=s.begin();it!=s.end();it++)?cout<<*it<<endl;????system("pause");?return?0;? }總結
 
                            
                        - 上一篇: Unity3d--跨平台(一)
- 下一篇: Ecilpse常用快捷键
