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