map翻譯為對映,我們之前所用到的int就是乙個int 對int的對映,我們還用到過char ,float,double,string…這都是int轉換各個型別的對映。
使用map可以將任意型別的基本型別建立對映對映到任意基本型別,都包括stl的容器
若要使用map需要新增map標頭檔案除此之外還要新增using namespace std;
我們可以看map的一些常用用法
1.map定義
map和其他容器不一樣的就是map需要提供對映前型別和對映後型別,所以需要在<>中寫兩個型別,例如《鍵型別,值型別》
如果我要使用乙個字串到整形的對映就要做成
mapint> mp;
因為是要作為字串與整形的對映所以不可以用char只能用string
鍵值還可以是stl容器所以也可以這麼寫
mapint>
,string> mp;
2.map容器內元素訪問
(1).通過下標訪問
和訪問普通陣列一樣建立對映後就可進行訪問(map的鍵值是唯一的)
例如
#include
#include
using
namespace std;
intmain()
//輸出結果為30
(2).通過迭代器訪問
map訪問迭代器和stl中其他類似
map::iterator it;
map迭代器不同的地方就是能訪問兩個值,所以決定了乙個it可以返回鍵和值,it->first訪問鍵,it->second訪問值
例如
#include
#include
using
namespace std;
intmain()
return0;
}/*結果為f 40
m 20
r 30
*/
看到結果後發現map會以鍵值由大到小進行排序,因為這是由於map內部由紅黑樹實現,在建立對映過程中由從小到大的排序功能
3.map常用函式
(1)find()
find()返回key為鍵的對映的迭代器時間複雜度為o(logn),n為map對映的個數
mp[
'a']=1
;mp[
'b']=2
;map<
char
,int
>
::iterator it=mp.
find
('b');
cout<>second/會輸出 2
(2)erase()
和其他基本類似有兩種用法刪除單個元素或者刪除乙個區間的元素
1.刪除單個it為迭代器
mp[
'a']=1
;mp[
'b']=2
;map<
char
,int
>
::iterator it=mp.
find
('b');
mp.erase
(it)
;//刪除 b 2
刪除乙個元素,key是鍵值
mp[
'a']=1
;mp[
'b']=2
;mp.
erase
('b');
//刪除了 b 2
2.刪除乙個區間的元素mp.erase(first,last),刪除的是[first,last)。複雜度為o(last-first)
mp[
'a']=1
;mp[
'b']=2
;mp[
'c']=3
;map<
char
,int
>
::iterator it=mp.
find
('b');
mp.erase
(it,mp.end)
;//刪除了b 2和c 3
(3)size()
返回map中對映的對數時間複雜度為o(1)
(4)clear()
清空map中的所有元素複雜度為o(n),n為元素個數
map的用途
1.大整數建立表的時候用字串代替
2.要求建立字串與數字的關係時
3.字串和字串的對映可能會用到
eg:c++11中還增加了unordere_map,以雜湊替代內部紅黑樹,可以只處理對映不排序,速度要遠快於map,有興趣可以自行了解哦
STL map的用法介紹!
使用前新增map標頭檔案,必須分別指明鍵和值的型別 mapword count map的建構函式 mapm 建立乙個名為m的空map物件,其鍵值型別分別為k和v mapm m2 建立m2的副本m,m與m2必須有相同的鍵值型別 mapm b,e 建立map型別的物件,儲存迭代器b和e標記的範圍內所有元...
STL map 常用用法詳解
stl 通用函式總結 1.標頭檔案 include2.定義 建立key value的對應 map mapstudent 定義乙個用int作為索引,並擁有相關聯的指向string3.常用操作 3.1在map中插入元素 mapstudent.insert pair 1,one 用insert方法插入pa...
STL map中key為結構體的用法
最近在使用stl中的map容器時,碰到key為結構體的情況,總結如下,以便提醒自己。我的使用情景是,我需要根據不同的比例尺 道路型別這兩個引數獲取到對應的道路寬度,由於我是使用map解決這個問題的,自然而然的就以比例尺 道路型別這兩個引數為key,道路寬度為value,建立的key如下 1typed...