C 關聯容器的使用set與map

2021-07-24 02:01:03 字數 2329 閱讀 3754

一 .

在c++中類似vector封裝陣列,string封裝字元,list封裝了鍊錶,map與set則封裝了二叉樹。其中set與map封裝的二叉樹則是採用的紅黑樹的底層結構的,這種結構與一般的二叉樹的型別有所不同,這種結構的二叉樹更加平衡高效檢索的二叉樹,對存入的資料進行了排序化的儲存。

二 (1)為什麼map與set的插入比其它的序列的容器的插入速度要高

這是由於採用二叉樹的資料結構,對其中乙個節點的插入或刪除類似鍊錶我們只需改變這個節點的位置資訊即可,把新插入或刪除的節點重新指向下乙個節點的資訊即可,並不用對其餘的資料進行記憶體的移動。而string與vector這樣的insert插入或刪除由於

(2)對於set或者map使用迭代器時注意的事項:

首選呢我們要注意對於這些容器來說,使用的begin,find以及end函式返回的都是迭代器型別的資料型別。但是注意find函式呢如果沒有查詢到在容器中相對應的值則會返回與end()一樣的值。

其次呢在使用迭代時我們要注意迭代器的型別對於每個容器來說都定義了相應的迭代器的型別,例如string::iterator s1=s.begin()  此時就是利用字串的第乙個字元給迭代器進行賦值操作,然後我們只要對迭代器在這個字串中進行操作即可。 vector::iterator s1=s.begin() 此時是利用向量的第乙個對字串進行賦值操作,

map::iterator s1=s.begin()則是利用map中的第乙個資料進行賦值操作,這就是容器相對應的迭代器型別,對於每個容器的迭代器型別擁有著一套迭代器規定好的操作。由於是指標的形式,在vector與string中迭代器有<,>的比較,這是因為他們是連續的位址而關聯類容器中則不行

注意返回的迭代器的型別是類似指標的形式,但是呢這個指標則有著型別如上所說的迭代器型別的指標,所以當改變原有容器的結構時我們要注意我們要重新對迭代器賦值,不能使用原有的迭代器,不然有可能會導致野指標的情況。

(3)對於set與map這兩個容器的型別

multiset,multimap,unordered_map,unordered_set,unordered_multimap等組合,首先解釋一下對於map,set我們只有乙個key值當我們有相同的key值時,我們則會用後邊出現的key值覆蓋前邊出現的key值,find函式則是尋找key值,返回key值所在的迭代器。multiset,multimap則是說呢我們可以有著相同的key值我們不會覆蓋,我們會儲存後續的key值。其中呢unordered則是無序的意思,即這類的關聯容器的代表了儲存時是無序的儲存,但是這種儲存是雜湊表對映的儲存,對於乙個輸入我們有乙個key值輸出,即y=f(x)的形式,這樣使得函式的查詢的複雜度在乙個時間即可,而紅黑二叉樹的那種查詢效率則在n(logn)這是由於對於有序的排序我們查詢的最快的速度是二分法那就是對數次查詢。

三 set容器的性質

(1)associative

在這個容器中並不是通過元素的絕對位置進行訪問,而是通過他們的key值進行間接的引用

(2)有序性

在這個容器中所有的元素都是嚴格的弱序的關係(即小於或等於),被插入的元素也是按照這個順序排列。

(3)set

元素的值也是識別set的關鍵

(4)獨一無二的key

在set中沒有兩個元素能夠有著相同的key

(5)動態分配

對於乙個set來說,由於內部有著allocat函式能夠動態分配記憶體。

四set的函式

(1)set初始化

set a;

set a=;這種初始化與上邊的一樣

set a(迭代器指標,迭代器指標)儲存的是這兩個指標之間的資料,這個指標指向的資料要和容器裡的value值的型別要一樣,它包含了[first,last)first資料不包含last資料。

(2)set迭代器函式

begin()返回第乙個元素的迭代,即指向第乙個位址的容器

end()返回最後乙個元素後邊乙個位置的東西,為空的

rbegin()返回翻轉迭代對於翻轉開始

rend()

cbegin()

cend()

crbegin()

crend()

(3)容器的容量

size()返回容器中元素的數量

empty()測試容器中元素是否為空

max_size()容器最大能夠儲存多少個元素

(4)容器的修改

insert()插入乙個元素

erase()刪除乙個元素 erase(迭代器,迭代器)刪除迭代器範圍內的元素

a.swap(b)交換容器中所有元素的值 a與b容器的值交換

clear()清楚容器中所有的元素

emplace()

(5)操作

find()發現某個元素 並返回這個元素的迭代

count()計算某個元素出現的次數

c 中關聯容器map與set總結

1.set set分為兩種 unordered set和set其中unordered set中的元素儲存是無序的,set中的元素儲存是由序的。兩種set中每個元素只存有乙個key,它支援高效的關鍵字查詢操作。set對應數學中的 集合。set具有以下的特點 儲存同一型別的資料元素 這點和vector ...

STL 關聯式容器 Set與Map的用法

c 的標準模板庫 簡稱stl 是乙個容器和演算法的類庫。容器往往包含同一型別的資料。set是一種關聯式容器,其特性如下 定義乙個元素為整數的集合a,可以用 seta 基本操作 對集合a中元素的有 插入元素 a.insert 1 刪除元素 如果存在 a.erase 1 判斷元素是否屬於集合 if a....

C 關聯容器map的簡單使用

一 map容器的定義 map是stl的乙個關聯容器,它是乙個單對映容器。它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map 現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,m...