C++學習筆記之STL標準庫(六)set/multiset 關聯容器

來源:互聯網
上載者:User

標籤:聲明   包含   inf   分享   輸出   大小   標頭檔   更改   學習   

包含標頭檔 #include <set>  聲明命名空間using namespace std;

set/multiset是關聯容器的一種,它們會對儲存的元素進行自動排序,儲存元素的值不能直接的被改變,只能通過刪除舊值,再插入新值的方式達到更改元素值的目的。set不允許元素的值有重複,而multiset允許有重複的元素,這是他們的唯一區別。關聯容器set, multiset以及後面的map, multimap內部採用的是一種非常高效的平衡檢索二叉樹:紅/黑樹狀結構。

1)建構函式

  set(); //建立一個空的set,如:set<int> a;

  multiset(); //建立一個空的multiset,如 :multiset<int> a;

  set(const Pred& comp); //建立一個空的set,指定定序按照comp方式

  如:struct comp //指定按照從大到小的順序排序儲存
    {
       bool operator()( const int &a, const int &b ) const
       {
          return a>b;
       }
    };

  multiset(const Pred& comp); //建立一個空的multiset,指定定序按照comp方式

  set(const set& x); //set拷貝建構函式

  multiset(const multiset& x); //multiset拷貝建構函式

  set(InIt first,InIt last); //複製序列[first,last)序列內的元素到set中

  multiset(InIt first,InIt last); //複製序列[first,last)序列內的元素到multiset中

  set(InIt first,InIt last,const Pred& comp); //複製序列[first,last)序列內的元素到set中,並指定定序按照comp方式

  如: int ia[6] = {50,10,60,20,30,100};
     set<int,comp> a(ia,ia+6);
     set<int,comp>::iterator iter;
     for(iter=a.begin();iter!=a.end();iter++)
     {
          cout<<*iter<<endl;
     }

  程式輸出:

  multiset(InIt first,InIt last,const Pred& comp); //複製序列[first,last)序列內的元素到multiset中,並指定定序按照comp方式

2)遍曆函數

  iterator begin(); //返回set/multiset頭指標,指向第一個元素

  iterator end(); //返回set/multiset尾指標,指向set/multiset最後一個元素的下一個位置

  reverse_iterator rbegin(); //反向迭代器,指向最後一個元素

  reverse_iterator rend(); //反向迭代器,指向第一個元素之前的位置

3)判斷函數

  bool empty() const; //被控序列為空白時,該成員函數返回true

4)大小函數

  size_type size() const; //返回被控序列的長度

  size_type max_size() const; //返回容器物件所能控制的最長序列的長度

5)插值函數

  iterator insert(const T& val); //multiset,插入元素val,並自動排序

  pair<iterator,bool> insert(const T& val); //set,插入元素val,並自動排序,為什麼返回是pair呢,pair裡有一個bool形變數,標誌插入是否成功,因為set不允許有重複的元素,因此插入元素時,需要判斷容器內是否已經存在該值

  iterator insert(iterator it,const T& val); //指定在迭代器it處插入元素值val。注意,it只是一個參考位置,因為set、multiset是自動排序的,所以最終是按照插入元素值的大小來決定插入位置的,而這個輸入的插入位置只是在程式員瞭解序列元素位置時給出的參考位置,可能會加快插入速度

  void insert(InIt first,InIt last); //對序列[first,last)中的每一個元素調用一次insert(*it)

6)刪除函數

  iterator erase(iterator it); //刪除被控序列中迭代器it所指定的元素

  iterator erase(iterator first,iterator last); //刪除被控序列中區間[first,last)內所有元素

  size_type erase(const Key& key); //刪除元素值等於key的元素,並返回刪除的元素個數

  void clear(); //清空被控序列

7)其他動作函數

  void swap(set& x); //交換set元素

  void swap(multiset& x); //交換multiset元素

  key_compare key_comp() const; //返回一個用於元素間值比較的函數

  value_compare value_comp() const; //返回一個用於比較元素間的值的函數

  iterator find(const Key& key) const; //尋找功能,返回元素值等於key的迭代器指標

  size_type count(const Key& key) const; //返回容器中元素等於key的元素的個數,由於一個索引值在set只可能出現0或1次,因此在set中可以用來判斷某一索引值是否出現在set中

  iterator lower_bound(const Key& key) const; //返回容器中值大於等於key的迭代器指標

  iterator upper_bound(const Key& key) const; //返回容器中值大於key的迭代器指標

  pair<iterator,iterator> equal_range(const Key& key) const; //返回一對迭代器,分別表示第一個大於或等於key的元素和第一個大於key的元素,傳回值是一個pair類型

C++學習筆記之STL標準庫(六)set/multiset 關聯容器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.