集合 C 資料結構 集合 set

2021-10-21 20:50:46 字數 2825 閱讀 5244

工作也不想做,部落格也不想寫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<

int> s

;for

(int i:s)

cout<",";

->1,

2,3,

4,5,

集合中的元素會按照值大小進行自動排序。set內部採用的是一種非常高效的平衡檢索二叉樹:紅黑樹,也稱為rb樹(red-black tree)。rb樹的統計效能要好於一般平衡二叉樹。

*注意:set中元素的值是不能直接被改變的,只能插入刪除指定元素。

//插入

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()

//求集合大小

集合運算不止可以對set,還可以對map、vector等進行運算,但前提是兩個集合必須按同樣的規則排序。set和map本身是有序的,可以直接進行集合運算,而vector則需要提前排序。

*注意:使用集合運算方法時需要帶頭檔案#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可使...