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容器,它的底層實...