成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

如何使用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 name;

```

其中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 s;然后string k *(); 是不行的,因?yàn)槟悴荒馨岩粋€(gè)迭代器賦值給“string”,要加上“*”解除引用:string k *(); 時(shí)間復(fù)雜度為O(1)。

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 numbers;

// 插入元素

(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),能夠幫助我們減少很多麻煩。

標(biāo)簽: