close

按此前往C++完整教學目錄

 

 

集合(set)複集合(multiset)

 

集合、複集合的使用方法與成員函式幾乎相同,主要差別在於集合不允許元素間有重複的值(不允許已經存在於集合內的值,重複存入),而複集合則無此限制。

無論是使用集合或複集合,均須先在標頭檔處寫上:#include <set>

建構:

(1)  集合種類<資料型態> 名稱;

(1)  集合種類<資料型態 , 雙元判斷式> 名稱;

註一:集合種類可為setmultiset,資料型態可為一般資料型態或類別物件

註二:以上的第一種建構方法,沒有設定雙元判斷式,因此默認less<資料型態>雙元判斷式less<資料型態>C++內建的樣板函式,用來逐個比較集合內兩元素間,誰比較小。其結果使得無論是set還是multiset中的元素均會由小排到大。若元素資料型態非是數字,便直接比較ASCII大小,一樣由小排到大。

範例:

int tt[5] = {2,8,3,3,9};    

set<int> s1;     //建構一空集合

multiset<int> ms1;   //建構一空複集合

set<int> s2(tt,tt+5);   //建構一集合,存入矩陣tt中元素

multiset<int> ms2(tt,tt+5);   //建構一複集合,存入矩陣tt中元素

set<int , greater<int> > s3(tt,tt+5);  //建構一集合,存入矩陣tt中元素,且以C++內建樣板函式greater<資料型態>,來使集合元素由大排到小,不同於s2的由小排到大。

multiset<int, greater<int> > ms3(tt,tt+5);    //建構一複集合,存入矩陣tt中元素,且以C++內建樣板函式greater<資料型態>,來使複集合元素由大排到小,不同於ms2的由小排到大。

set<int>::iterator i;   //set的迭代器可與multiset共用。

 

for(i=s2.begin();i!=s2.end();i++){

cout<<*i<<","; }cout<<endl;  //顯示:2,3,8,9,

for(i=ms2.begin();i!=ms2.end();i++){

cout<<*i<<","; }cout<<endl;  //顯示:2,3,3,8,9,

for(i=s3.begin();i!=s3.end();i++){

cout<<*i<<","; }cout<<endl;  //顯示:9,8,3,2,

for(i=ms3.begin();i!=ms3.end();i++){

cout<<*i<<","; }cout<<endl;  //顯示:9,8,3,3,2,

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(0) 人氣()