map的常用用法詳解

2021-09-26 19:55:30 字數 4216 閱讀 3748

map翻譯為對映,也是常用的stl容器。眾所周知,在定義陣列時(如 int array[l00])其實是定義了乙個從int型到int型的對映,比如array[0]=25、array[4]=36就分別是將0對映到25、將4對映到36。乙個 double型陣列則是將int型對映到double型,例如db[0]=3.14,db[1]=0.01。

但是,無論是什麼型別,它總是將int型對映到其他型別。這似乎表現出乙個弊端:當需要以其他型別作為關鍵字來做對映時,會顯得不太方便。例如有一本字典,上面提供了很多的字串和對應的頁碼,如果要用陣列來表示「字串-->頁碼」這樣的對應關係,就會感覺不太好操作。這時,就可以用到map,因為map可以將任何基本型別(包括stl容器)對映到任何基本型別(包括stl容器),也就可以建立 string型到int型的對映。

要使用map,需要新增map標頭檔案,即#include 。除此之外,還需要在標頭檔案下面加上一句:「using namespace std;」。

mapmp;

mp, string> mp;

map和其他stl容器在定義上有點不一樣,因為map需要確定對映前型別(鍵key)和對映後型別(值 value),所以需要在內填寫兩個型別,其中第乙個是鍵的型別,第二個是值的型別。如果是int型對映到int型,就相當於是普通的int型陣列。

而如果是字串到整型的對映,必須使用 string而不能用char陣列,因為char陣列作為陣列,是不能被作為鍵值的:

mapmp;
和訪問不同的陣列是一樣的,例如對乙個定義為mapmp的map來說,就可以直接使用mp['c']的方式來訪問它對應的整數。但是要注意,map中的鍵是唯一的。

程式**:

#include#includeusing namespace std;

int main()

執行結果:

map迭代器的定義:

map::iterator it;
map迭代器使用方法與其他的stl不同,必須能通過乙個it來同時訪問鍵和值。(map可以使用it->first來訪問鍵,使用it->second來訪問值)。

程式**:

#include#includeusing namespace std;

int main()

for(map::iterator it=mp.begin();it!=mp.end();it++)

return 0;

}

執行結果:

map會以鍵從小到大的順序自動排序,即按照afind(key)返回鍵為key的對映的迭代器,時間複雜度為o(logn),n為map中對映的個數。

程式**:

#include#includeusing namespace std;

int main()

map::iterator it = mp.find('b');

printf("%c %d\n",it->first,it->second);

return 0;

}

執行結果:

①刪除單個元素

程式**:

#include#includeusing namespace std;

int main()

map::iterator it = mp.find('b');

mp.erase(it);//刪除d 2

for(map::iterator it = mp.begin();it!=mp.end();it++)

printf("%c %d\n",it->first,it->second);

return 0;

}

執行結果:

程式**:

#include#includeusing namespace std;

int main()

mp.erase('b');//刪除d 2

for(map::iterator it = mp.begin();it!=mp.end();it++)

printf("%c %d\n",it->first,it->second);

return 0;

}

執行結果:

②刪除乙個區間內的所有元素

mp.erase(first,last),其中first為需要刪除的區間的起始迭代器,lat為需要刪除的區間的末尾迭代器的下乙個位址,也即為刪除左閉右開的區間[first,last)。時間複雜度為o(last-first)。

程式**:

#include#includeusing namespace std;

int main()

map::iterator it = mp.find('b');

mp.erase(it,mp.end());//刪除d 2 和其之後的所有對映

for(map::iterator it = mp.begin();it!=mp.end();it++)

printf("%c %d\n",it->first,it->second);

return 0;

}

執行結果:

獲取map中對映的對數,時間複雜度o(1)。

程式**:

#include#includeusing namespace std;

int main()

printf("%d\n",mp.size());

return 0;

}

執行結果:

清空map中的所有元素,複雜度為o(n)。

程式**:

#include#includeusing namespace std;

int main()

printf("原元素個數 = %d\n",mp.size());

mp.clear(); //清空map

printf("現元素個數 = %d\n",mp.size());

return 0;

}

執行結果:

(1)需要建立字元(或字串)與整數之間對映的題目,使用map可以減少**量。

(2)判斷大整數或者其他型別資料是否存在的題目,可以把map當bool陣列用。

大整數請參考:大整數

大整數的四則運算

(3)字串和字串的對映也有可能會遇到。

map函式常用用法

map翻譯為對映,也是常見的stl容器 在定義陣列時 如int array 100 其實是定義了乙個從int型到int型的對映 比如array 0 25 array 4 36就分別是將0對映到25 將4對映到36 乙個double型陣列則是將int型對映到double型,如db 0 3.14,dou...

6 4 map的常用用法

map翻譯為對映,也是常用的stl容器,在使用map時,需要新增map標頭檔案,include。1,map的定義 mapmp,typename1是對映前的型別 鍵key typename2是對映後型別 值value 如 mapmp,是int型對映到int型,另外map的鍵和值也可以是stl容器,例如...

STL map 常用用法詳解

stl 通用函式總結 1.標頭檔案 include2.定義 建立key value的對應 map mapstudent 定義乙個用int作為索引,並擁有相關聯的指向string3.常用操作 3.1在map中插入元素 mapstudent.insert pair 1,one 用insert方法插入pa...