STL學習 15 set集合

2021-09-24 16:54:25 字數 4674 閱讀 7801

set 、multiset都是集合類,差別在於set中部允許有重複元素,multiset中允許有重複元素。

常用函式

//(1)建構函式

set(const pred& comp = pred(), const a& al = a()); //建立空集合

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

set(const value_type *first, const value_type *last,

const pred& comp = pred(), const a& al = a()); //拷貝[first,last)之間元素構成新集合

multiset(const pred& comp = pred(), const a& al = a()); //建立空集合

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

multiset(const value_type *first, const value_type *last,

const pred& comp = pred(), const a& al = a()); // 拷貝[first,last)之間元素構成新集合

//(2)大小、判斷空函式

int size() const ;//返回容器元素個數

bool empty() const ;//判斷容器是否空,若返回true,表明容器已空

//(3)增加、刪除函式

pairinsert(const value_type& x); // 插入元素x

iterator insert(iterator it, const value_type& x); // 在迭代指標it處,插入元素x

void insert(const value_type *first, const value_type *last);//插入[first, last)間元素

iterator erase(iterator it);// 刪除迭代指標it處元素

iterator erase(iterator first, iterator last);//刪除[first, last)迭代指標間元素

size_type erase(const key& key);//刪除元素值等於key的元素

//(4)遍歷函式

iterator begin();// 返回首元素的迭帶器指標

iterator end();// 返回尾元素後的迭帶器指標,而不是尾元素的迭帶器指標

reverse_iterator rbegin();// 返回尾元素的逆向迭帶器指標,用於逆向遍歷容器

reverse_iterator rend();// 返回首元素前的逆向迭帶器指標,用於逆向遍歷容器

//(5)操作函式

const_iterator lower_bound(const key& key);//返回容器元素等於key迭代指標,否則返回end()

const_iterator upper_bound(const key& key);//

int count(const key& key) const;//返回容器中元素值等於key的元素個數

pairequal_range(const key& key) const;//

返回容器中元素值等於key的迭代指標[first, last)

const_iterator find(const key& key) const;//查詢功能,返回元素值等於key迭代器指標

void swap(set& s);// 交換單集合元素

void swap(multiset& s);// 交換多集合元素

#include #include using namespace std;

void display(multiset& s)

cout << endl;

}void main()

; multisetmyset;

for(int i=0; imyset2(myset);

display(myset2); //2 3 3 3 5 7 9 9

cout << "通過建構函式set(const value_type *first, const value_type *last)建立集合:" << endl;

multisetmyset3(a, a+ sizeof(a)/sizeof(int));

display(myset3); //2 3 3 3 5 7 9 9

}

equal_range, pair, count, size用法舉例

#include #include using namespace std;

void main()

; setmyset(a, a+sizeof(a)/sizeof(int)); //2 3 5 7 9

multisetmymultiset(a, a+sizeof(a)/sizeof(int));//2 3 3 3 5 7 9 9

pair::iterator, set::iterator> rangeset;

pair::iterator, multiset::iterator> rangemultiset;

rangeset = myset.equal_range(3);//返回集合中等於3的迭代器指標,用pair接收

rangemultiset = mymultiset.equal_range(3);//返回多集合中等於3的迭代器指標,用pair接收

int ncount = myset.count(3); //求集合中等於3的元素個數

int nmulticount = mymultiset.count(3);//求多集合中等於3的元素個數

set::iterator te = null; //集合搜尋結果遍歷

cout << "set(搜尋值等於3的元素): ";

for(te = rangeset.first; te != rangeset.second; te++)

cout << endl;

cout << "\t個數是: " << ncount << endl;

cout << "\t總共元素個數是: " << myset.size() << endl;

multiset::iterator it = null;//多集合搜尋結果遍歷

cout << "multiset(搜尋值等於3的元素): ";

for(it = rangemultiset.first; it != rangemultiset.second; it++)

cout << endl;

cout << "\t個數是: " << nmulticount << endl;

cout << "\t總共元素個數是: " << mymultiset.size() << endl;

}

編乙個集合類,包括並、交、差等主要功能,不允許有重複資料。並用學生類student加以測試。

分析:很明顯要用到set類,但set本身並沒有兩集合的並、交、差函式。因此從set類派生,增加並、交、差3個主要函式即可,集合類myset及測試用到的student類如下所示。

#include #include #include using namespace std;

class student

bool operator<(const student& s) const //必須過載,按學號公升序排列

string getno()

string getname()

};ostream& operator << (ostream& os, student& s) //為student物件標準輸出做準備

template, class a = allocator>

class myset:public set

void add(myset& second) //兩集合並 }

void intersection(myset& second)//兩集合交

te ++;

} swap(mid);

} void difference(myset& second)//兩集合做差

te ++;

} swap(mid);

}void show() //集合顯示函式 }

};void main()

, };

student t[3] = ,,};

mysetm1(s, s+2);

mysetm2(t, t+3);

cout<<"原始m1集合:"

cout<<"原始m2集合:"

cout << "m1並m2為:"<< endl;

m1.add(m2); //求m1並m2, 若此位置改為intersection可求交,改為difference,可求差

m1.show();

}

java集合15 set架構

前面,我們已經系統的對list和map進行了學習。接下來,我們開始可以學習set。相信經過map的了解之後,學習set會容易很多。畢竟,set的實現類都是基於map來實現的 hashset是通過hashmap實現的,treeset是通過treemap實現的 首先,我們看看set架構。01 set 是...

STL庫之set集合

include include 使用set集合的好處是查詢方便,使用的資料結構是紅黑樹 using namespace std int main 遍歷 set iterator it for it m.begin it m.end it 反向遍歷 set reverse iterator it fo...

STL初步學習(set)

set可以看作乙個集合,可以實現自動排序 公升序 和去重 在許多題目中,都可以使用這個模板庫,減少很多操作,例如p1923 第k小數,當然,這道題有很多奇奇怪怪的做法,分值都不同,之後會講解 set的定義 include 標頭檔案 using namespace std 這條必須加 seta 同ve...