集合(set)、複集合(multiset):
集合、複集合的使用方法與成員函式幾乎相同,主要差別在於集合不允許元素間有重複的值(不允許已經存在於集合內的值,重複存入),而複集合則無此限制。
無論是使用集合或複集合,均須先在標頭檔處寫上:#include <set>
建構:
(1) 集合種類<資料型態> 名稱;
(1) 集合種類<資料型態 , 雙元判斷式> 名稱;
註一:集合種類可為set或multiset,資料型態可為一般資料型態或類別物件。
註二:以上的第一種建構方法,沒有設定雙元判斷式,因此默認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,
留言列表