工作也不想做,部落格也不想寫qaq又是乙個難熬的下午……
這個月的leetcode每日一題落下了好多,主要是動態規劃我真不會,看題解基本也想不明白,dp我的一生之敵(x_x)
這裡要介紹一下順序容器和關聯容器的區別。順序容器就是按照元素在容器中的位置,來進行儲存和訪問,例如vector、deque、list、forward_list、array、string,它們的共同特點是可以快速順序訪問元素;而關聯容器中的元素按照關鍵字來進行儲存和訪問,例如set和map,因此它們不支援位置相關的操作,但是支援高效的關鍵字查詢和訪問。
這裡的集合和數學上的集合概念差不多,集合的主要特點有確定性(乙個元素只能屬於或不屬於乙個集合),互異性(即任意兩個元素互不相同),和無序性(元素之間是無序的)。
而set資料結構的兩大特點是
set內部元素自動排序
set內部元素唯一,無重複元素
要注意的是這裡的排序是指,在set的內部是按元素值大小進行排序的,與元素的新增順序無關。
*注意:在使用時需要帶頭檔案#include
前面提到,集合不支援按照位置訪問元素,所以一般可以這樣讀取集合內全部元素set<
int> s;
set<
int> s
;set<
int>
s(s1)
;//拷貝構造
set<
int>
s(v.
begin()
, v.
end())
;//v可以是同型別一維陣列
集合中的元素會按照值大小進行自動排序。set內部採用的是一種非常高效的平衡檢索二叉樹:紅黑樹,也稱為rb樹(red-black tree)。rb樹的統計效能要好於一般平衡二叉樹。set<
int> s
;for
(int i:s)
cout<",";
->1,
2,3,
4,5,
*注意:set中元素的值是不能直接被改變的,只能插入刪除指定元素。
集合運算不止可以對set,還可以對map、vector等進行運算,但前提是兩個集合必須按同樣的規則排序。set和map本身是有序的,可以直接進行集合運算,而vector則需要提前排序。//插入
s.insert
(n);
//刪除
s.erase
(n);
//刪除指定元素
s.erase
(v.begin()
,v.end()
);//刪除迭代器範圍內的元素
s.clear()
;//清空集合
//查詢
s.count
(n)//集合中元素唯一,所以count只能返回0或1,可以判斷元素是否存在
s.find
(n)//返回乙個指向被查詢到元素的迭代器
s.size()
//求集合大小
*注意:使用集合運算方法時需要帶頭檔案#include
舉個栗子://交集a*b,結果存到集合c中
set_intersection
(a.begin()
,a.end()
,b.begin()
,b.end()
,inserter
(c,c.
begin()
));//並集a+b,結果存到集合c中
set_union
(a.begin()
,a.end()
,b.begin()
,b.end()
,inserter
(c,c.
begin()
));//差集a-b(注意順序),結果存到集合c中
set_difference
(a.begin()
,a.end()
,b.begin()
,b.end()
,inserter
(c,c.
begin()
));
記得存放結果的集合要為空,不然原有的元素還會存在。set<
int> a
;set<
int> b
;set<
int> c;
//求交集
set_intersection
(a.begin()
,a.end()
,b.begin()
,b.end()
,inserter
(c,c.
begin()
));-
>
c.clear()
;//求並集
set_union
(a.begin()
,a.end()
,b.begin()
,b.end()
,inserter
(c,c.
begin()
));-
>
c.clear()
;//求差集
set_difference
(a.begin()
,a.end()
,b.begin()
,b.end()
,inserter
(c,c.
begin()
));-
>
集合是乙個比較重要的結構,集合運算在一些場景下也非常實用,下次寫用法有點類似的雜湊表。
資料結構 單列集合 List集合 Set集合
1 陣列特點 查詢快 位址是連續的,通過首位址可以找到陣列,通過索引 可以快速查詢某個元素 增刪慢 陣列的長度是固定的,要增刪某個元素,必須重新建立乙個陣列,把資料複製過來 2 arraylist特點 底層也是使用陣列實現,兼具陣列的特點 3 linkedlist特點 底層是鍊錶結構 增刪快 因為如...
資料結構之集合Set
1 高層的資料結構,集合set和對映map,什麼是高層的資料結構呢,比如說是棧和佇列,這種資料結構更像是先定義好了使用介面,有了這些使用介面,包括資料結構本身所維持的一些性質,可以很方便的放入到一些應用中,但是底層實現可以多種多樣的,比如棧和佇列,底層實現既可以是動態資料,也可以是鍊錶。集合就是承載...
Python資料結構集合 set
集合 set,collection翻譯為集合型別或容器,是乙個大概念。集合特性 可變 無序 不重複 可迭代的元素的集合。示例 1 set集合的元素要求必須是可hash的 2 目前所學過的不可hash的型別有 list set bytearray dict 3 元素不可以索引,因為無序 4 set可使...