set翻譯為集合,是乙個內部自動有序且不含重複元素的容器
set的定義
set<
typename
> name;
set<
int> vi;
set<
double
> vi;
set<
char
> vi;
set vi;
//node可以是結構體
set<
int> a[
100]
;//陣列裡面每個元素都是乙個set集合
insert(x) 將x插入set容器中,並自動遞增排序和去重
//insert(x) 將x插入set容器中,並自動遞增排序和去重
st.insert(4
);st.
insert(3
);st.
insert(1
);st.
insert(2
);//不支援for
(set<
int>
::iterator it=st.
begin()
;it!=st.
end(
);it++
)
set集合的遍歷
set只能通過迭代器遍歷
除了vector和string之外的stl容器都不支援*(it+i)的訪問方式
//不支援for
(set<
int>
::iterator it=st.
begin()
;it!=st.
end(
);it++
)
set內的元素會自動遞增排序,且自動去除了重複元素
find(value)返回set中對應值為value的迭代器
set<
int>
::iterator it=st.
find(3
);//查詢值為3的元素返回其迭代器
cout<<
*it/如果查詢的元素不存在會返回最後乙個元素的迭代器
erase()刪除元素
//erase() 有兩種用法一種是刪除單個元素另一種是刪除乙個區間的所有元素
//刪除單個的方法又有兩種
it為所刪元素的迭代器 可以和find連用
//1 2 3 4
st.erase
(st.
find(3
));for
(set<
int>
::iterator it=st.
begin()
;it!=st.
end(
);it++
) cout< value為所刪除元素的值
//1 2 4
st.erase(1
);for(set<
int>
::iterator it=st.
begin()
;it!=st.
end(
);it++
) cout
insert(4
);st.
insert(3
);st.
insert(1
);st.
insert(2
);//刪除整個區間
//1 2 3 4
st.erase
(st.
find(2
),st.
end())
;for
(set<
int>
::iterator it=st.
begin()
;it!=st.
end(
);it++
)
size()返回set內的元素個數
//1 2 3 4
cout
;//4
clear()清空st中的所有元素
st.
clear()
; cout
;
empty() 判斷是否為空
st.
clear()
; cout
/1 true
lower_bound(k)
upper_bound(k)
st.
insert(4
);st.
insert(3
);st.
insert(1
);st.
insert(2
);//1 2 3 4
//lower_bound(k) 返回乙個迭代器,指向鍵值不小於k的第乙個元素
set<
int>
::iterator it=st.
lower_bound(2
);//尋找第乙個大於等於2的數
cout<<
*it/2//upper_bound(k) 返回乙個迭代器,指向鍵值大於k的第乙個元素
it=st.
upper_bound(2
); cout<<
*it/3
初級總結 容器2 Set介面
介紹完了list介面,我們來看看set介面。set介面 內部不可重複。set介面有兩個重要的實現類 hashset和treeset。hashset屬於無序,雜湊存放,需要重寫equals和hashcode方法 hashcode相等,equals 內容 不一定相等 equals 內容 相等,hashc...
C 知識點 STL容器2 set
set可能算是一種比較冷門的stl容器了,喜歡用它的人覺得set真牛逼 不喜歡它的人覺得set真垃圾 很不幸,我屬於第一種 set作為一種封裝好的資料容器 最吸引人的地方是它的自動排序功能 這也就是說你可以擁有乙個實時的排好序的序列 或者可以用乙個序列同時實現大根堆和小根堆 時間複雜度和空間都是兩者...
C STL之Set集合容器
set集合容器實現了紅黑樹的平衡二叉樹的資料結構,在插入元素時候,它會自動的進行調整二叉樹的排列,把該元素放到適當的位置,以保證每個子樹根節點的鍵值大於左子樹所有的鍵值,小於右子樹所有節點的鍵值 另外,還要確保根節點左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而達到檢索的速度最快 注意...