STL3 Set容器基礎總結

2021-06-25 14:47:35 字數 2353 閱讀 2055

map

容器是鍵

-值對的集合,好比人名為鍵的位址和**號碼。相反的,

set容器型別只是單純的鍵的集合。當只想知道乙個鍵是否存在時,使用

set容器是最合適的。

set不支援下標操作符

,而且沒有定義

型別。在

set容器中,

value_type

不是pair型別,

而是與key_type

相同的型別。

一、set容器的定義和使用

與map

容器一樣,set

容器的每個鍵都只對應乙個元素。以一段範圍的元素初始化set

物件,或在set

物件中插入一組元素時,對於每個鍵,事實上都只是新增了乙個元素:

[cpp]view plain

copy

vector<

int> ivec;  

for(

inti = 0;i != 10; ++i)  

set> iset(ivec.begin(),ivec.end());  

cout <

<

cout <

<

、在set

中新增元素

可以使用insert

操作在set

容器中新增元素:

[cpp]view plain

copy

setstrset;  

strset.insert("utile"

);  

strset.insert("world"

);  

for(set::iterator iter = strset.begin(); iter != strset.end(); ++iter)    

另一種用法:在呼叫insert

函式時,提供一對迭代器實參,插入其標記範圍內的所有的元素。該版本的insert

函式類似於形參為一對迭代器的建構函式– 對於乙個鍵,僅僅插入乙個元素:

[cpp]view plain

copy

set<

int> iset;  

iset.insert(ivec.begin(),ivec.end());  

與map

容器的操作一樣,帶有乙個鍵引數的insert

版本返回pair

型別物件,包含乙個迭代器和乙個bool

值,迭代器指向擁有該鍵的元素,而bool

值則表明是否新增了元素。

使用迭代器對的版本返回void

型別。 2

、從set

中獲取元素

set容器不提供下標操作符。為了通過鍵從

set中獲取元素

,可使用

find

運算。如果只需簡單地判斷某個元素是否存在,

同樣可以使用

count運算,

返回set

中該鍵對應的元素個數。當然,對於

set容器

,count

的返回值只能是

1(該元素存在)或

0(該元素不存在

):[cpp]view plain

copy

cout <

cout <

cout <

if(iset.find(11) != iset.end())  //  

正如不能修改map

中的元素的鍵部分一樣,set

中的鍵也為const

。在獲取指向set

中某元素的迭代器之後,只能對其進行讀操作:

[cpp]view plain

copy

set<

int>::iterator iter = iset.find(1);  

*iter = 11;             //error

cout <

給乙個例子:

在之前用map統計單詞的數量的時候利用了map下標操作的特性,如果其鍵值不存在,那麼就立即進行初始化

[cpp]view plain

copy

//原程式

void

retricted_wc(ifstream &remove_file,mapint

> &word_count)  

string word;  

while

(cin >> word)  

}  }  

STL學習之set容器

set容器只是單純的鍵的集合。除了兩種例外情況外,set容器支援大部分的map操作。建構函式 cpp view plain copy explicit set const compare comp compare const allocator allocator template class in...

STL容器Set的使用

首先了解一下set,我們所知道的set是stl中的乙個容器,但是set實質上也是有不同的版本,我們最根本的劃分就是根據其底層實現分別是紅黑樹和hash表分為兩種,首先這兩種結構最本質的區別就是有序和無序,紅黑樹的儲存是有序的而hash表是無序儲存,但它並不影響set的最主要的用法就是查詢,而從查詢角...

STL容器之set用法

目錄 一 set容器概念 二 set構造和基本函式介面 三 統計和查詢 set是一種關聯式容器,底層是通過平衡二叉樹 紅黑樹 實現的,插入 刪除和查詢效率都非常高,所有元素插入容器中,會被預設以公升序的形式進行排序,而且不允許插入已經存在且相同的資料元素。此外還有乙個multiset容器,它的底層實...