如何使用C STL中的set
如何聲明一個(gè)set在C STL中,set是一個(gè)十分有用的容器。要聲明一個(gè)set,可以使用以下語(yǔ)法:```set name;```其中value_type是set中所要存儲(chǔ)的元素類(lèi)型,例如int、s
如何聲明一個(gè)set
在C STL中,set是一個(gè)十分有用的容器。要聲明一個(gè)set,可以使用以下語(yǔ)法:
```
set
```
其中value_type是set中所要存儲(chǔ)的元素類(lèi)型,例如int、string或自定義的結(jié)構(gòu)體名稱(chēng)。聲明set時(shí)還要包含set頭文件,即`include
set中的元素類(lèi)型必須定義小于號(hào)
set的內(nèi)部實(shí)現(xiàn)是一棵紅黑樹(shù),因此set中的元素類(lèi)型必須定義小于號(hào)。C 自帶的元素類(lèi)型(如int、string)已經(jīng)幫我們定義好了小于號(hào),它們?cè)趕et中會(huì)按照從小到大的順序排列。如果是自定義的結(jié)構(gòu)體,則需要學(xué)會(huì)如何重載運(yùn)算符。
set的眾多內(nèi)置函數(shù)
set提供了許多內(nèi)置函數(shù)來(lái)操作和訪(fǎng)問(wèn)元素,以下是常用的幾個(gè)函數(shù):
1. insert(x)/erase(x):在set中插入/刪除元素x,其中x的類(lèi)型必須是聲明該set時(shí)的類(lèi)型。時(shí)間復(fù)雜度為O(logn),其中l(wèi)og以2為底,n為set中的元素個(gè)數(shù)。如果x不在該set中,則在erase(x)時(shí)什么都不會(huì)刪除。
2. begin()/end():返回該set的首/尾迭代器。因?yàn)槭堑?,如果想轉(zhuǎn)換成聲明時(shí)的類(lèi)型,要在前面加上“*”。例如,聲明了set
3. empty()/size():判斷set是否為空/返回set的大?。丛貍€(gè)數(shù))。所有STL容器都有這兩個(gè)內(nèi)置函數(shù),時(shí)間復(fù)雜度為O(1)。
4. clear():清空一個(gè)set,時(shí)間復(fù)雜度為O(n)。
5. find(x):查找set中是否有元素x,如果有,則返回指向該元素的迭代器,否則返回end()。時(shí)間復(fù)雜度為O(logn)。
set常用于排序和去重
由于set的特性,它常常被用來(lái)進(jìn)行排序和去重。以下代碼能夠?qū)崿F(xiàn)這兩個(gè)功能:
```cpp
set
// 插入元素
(5);
(2);
(8);
(2); // set會(huì)自動(dòng)去重,只會(huì)記錄一次
// 輸出排序后的元素
for (auto it (); it ! numbers.end(); it) {
cout << *it << " ";
}
```
以上就是set的大部分使用方法與應(yīng)用。盡管set的大部分內(nèi)置函數(shù)時(shí)間復(fù)雜度較高,但如果運(yùn)用得當(dāng),能夠幫助我們減少很多麻煩。