1.容器型別
按關鍵字有序儲存元素:
map:用來儲存鍵值對,關鍵字不可以重複
set:只儲存關鍵字,關鍵字不可重複
multimap:用來儲存鍵值對,關鍵字可以重複
multiset:只儲存關鍵字,關鍵字可以重複
無序集合:
unordered_map:用雜湊函式組織的
mapunordered_set:用雜湊函式組織的
setunordered_multimap:用雜湊函式組織的
map,關鍵字可重複
unordered_multiset:用雜湊函式組織的
set,關鍵字可重複
2.定義和初始化容器
可以使用3
1.c= 按括號中的列表進行初始化
mapword_count=, };
2.初始化為另乙個同型別容器的拷貝
c c(c1) c初始化為
c1的拷貝
3.按照迭代器範圍來初始化容器
c c(b,e) 將
b,e迭代器之間的元素拷貝到
c3.關聯容器額外的型別別名
key_type:容器的關鍵字型別
對於set
容器,key_type
和value_type
一樣對於map
容器,表示關鍵字的型別
map,每個關鍵字關聯的值的型別
value_type:對於
set,與
key_type
相同對於map
,表示鍵值對
pair鍵值對有兩個公有成員
first
和second
,分別表示關鍵字和值
4.新增元素
c.insert(v)
c.emplace(args)
對於map
,set
:只有當元素不再容器中才插入
v,返回乙個
pair
,first
成員表示乙個迭代器,指向該關鍵字,
second
成員是 表示是否插入成功的
bool
值對於multimap
和multiset
:無論什麼時候都會插入
v,並返回乙個指向新元素的迭代器
c.insert(b,e)
c.insert(li)
分別表示插入b,e
迭代器之間的元素,插入
li列表中的元素,返回
void
對於map
,set
:只會插入不再容器中的元素
對於multimap
和multiset
:插入每個元素
c.insert(p,v)
c.empalce(p,args)
並不是插入到p
之前(與順序容器不同),而是指示從
p迭代器開始搜尋,插入到指定位置(因為有序容器中的元素是有序的)
5.刪除容器
c.erase(k):刪除關鍵字為
k的元素,返回被刪除元素的數量
c.erase(p):刪除
p迭代器指向的元素,返回指向被刪元素之後元素的迭代器,
p必須指向
c中的真實元素
c.erase(b,e):刪除迭代器
b,e之間的元素,返回
e6.訪問元素
c.find(k):返回指向第乙個關鍵字為
k的迭代器,若不存在
k,返回尾後迭代器(
c.end()
)c.count(k):返回關鍵字等於
k的元素數量,對於
set和
map,元素數永遠為1和
0c.lower_bound(k):返回乙個迭代器,指向第乙個 關鍵字
>=k
的元素c.upper_bound(k):返回乙個迭代器,指向第乙個 關鍵字
>k
的元素c.equal_range(k):返回乙個迭代器
pair
,表示關鍵字
=k的元素範圍,若
k不存在,
pair
兩個成員都為
c.end()
注:使用c.lower_bound(k)
和c.upper_bound(k)
配合查詢k,若
k存在,分別返回第乙個指向
k的迭代器和最後乙個指向
k元素之後的迭代器(不是最後乙個k
元素),若
k不存在,則這兩個迭代器相等。
C 關聯容器總結
關聯容器 關聯容器共享大部分 但不是全部 順序容器的操作。關聯容器不提供front,push front,pop front,back,push back,pop back等操作。一 map和set型別 1 關聯容器的型別 1 map定義的型別 map key type 鍵的型別 const str...
關聯式容器的總結
今天細緻的學習了map和set容器的用法和功能,終於感受到了自己之前對stl的認識還是太少太淺薄了 今天我來總結一下答題的框架 容器首先分為關聯式容器和序列式容器,簡單的是序列式容器,我先說一下序列式容器,序列式容器其實說白了就是簡單的鍊錶的實現,內部查詢的順序都是按照鍊錶的順序結構來查詢刪除和實現...
STL的關聯式容器總結
map是紅黑樹 一種非嚴格意義上的平衡二叉樹 置於紅黑樹的具體可以看演算法和資料結構,這裡不多說。map的key型別必須要過載 操作符,無法過載時用自定義仿函式代替map的第三個引數,因為map是有序的。map第乙個引數是key,第二個引數是value,第三個引數是compare函式,第四個引數是記...