STL map的用法介紹!

2021-07-15 13:39:54 字數 3193 閱讀 3301

使用前新增map標頭檔案,必須分別指明鍵和值的型別:

mapword_count;
map的建構函式:

mapm;   建立乙個名為m的空map物件,其鍵值型別分別為k和v

mapm(m2);   建立m2的副本m, m與m2必須有相同的鍵值型別

mapm(b,e);   建立map型別的物件,儲存迭代器b和e標記的範圍內所有元素的副本,元素的型別必須能轉化為pair

map物件的元素是鍵-值對,map的value_type反映了這樣的事實,value_type是儲存元素的鍵以及值的pair型別,而且鍵為const,比如word_count的型別為:

pair型別

map類定義的型別:

map::key_type  在map容器中,用作索引的鍵的型別

map迭代器進行解引用將產生pair型別的物件

map::iterator map_it=word_count.begin();

cout

cout

<

"map_it->first="

new key"//

error

++map_it->second

使用insert成員實現或者先用下標操作符獲取元素,然後給獲取的元素賦值

使用下標訪問map物件

mapwoed_count;  //

空map

word_count["

anna

"]=1; //

插入預設的初始元素(鍵:anna, 值:1)

map的下標也使用索引(就是鍵)來獲取該鍵所關聯的值,如果該鍵已在容器中,則map的下標運算行為相同,返回該鍵所關聯的值。只有在所查詢的鍵不存在的時候,map容器才為該鍵建立乙個新的元素,並將它插入到此map物件中。

1、下標操作符返回值的使用

下標操作符返回的是左值,即使特定鍵所關聯的值

cout

anna"];

++word_count["

anna"];

count

anna

"];

2、下標行為的程式設計意義

如果下標所表示的鍵在容器中不在,則新增新元素,這一特性可使程式驚人的簡練:

mapword_count;

string

word;

while(cin>>word)

++word_count[word];

這段程式用來記錄每個單詞出現的次數

程式設計練習:編寫程式統計並輸出所讀入的單詞出現的次數

#include#include

#include

#include

#include

using

namespace

std;

intmain()

插入單個元素的insert版本使用鍵-值pair型別的引數,對於引數為一對迭代器的版本,迭代器必須指向鍵-值pair型別的元素

map容器的接受單個值的insert版本的返回型別

使用下標給map新增新元素,元素的值部分將採用值初始化,而插入元素的另乙個方法是:直接使用insert成員,語法更緊湊:

word_count.insert(map::value_type("

anna

",1));

傳遞給insert的實參相當的笨拙,可以用兩種方法簡化:

使用make_pair

word_count.insert(make_pair("

anna

",1));

或使用typedef:

typedef map::value_type valtype;

word_count.insert(valtype(

"anna

", 1))

檢測insert的返回值

如果試圖插入的元素所對應的鍵已經在容器中,則insert將不做任何操作,但是帶有乙個鍵-值pair形參的insert版本將返回乙個值:包含乙個迭代器和乙個bool值的pair物件,其中迭代器指向map中具有相應鍵的元素,而bool值則表示是否插入了該元素

下面使用insert重寫的單詞統計程式:

#include#include

#include

#include

#include

using

namespace

std;

intmain()

map::iterator it;

for(it=word_count.begin(); it!=word_count.end(); it++)

cout

return0;

}

下標操作符讀取乙個值會產生***,map容器提供了兩個操作:count和find,用於檢查某個鍵是否存在而不會插入該鍵

m.count(k)    返回m中k的出現次數

m.find(k)    如果m容器中存在按k索引的元素,則返回指向該元素的迭代器。如果不存在,則返回超出末端迭代器

1、使用count檢查map物件中某鍵是否存在

對於map物件,count成員的返回值只能是0或1,map容器只允許乙個鍵對應乙個例項,所有count可有效地表明乙個鍵是否存在

mapword_count;

int occurs=0

;if(word_count.count("

foo"

)) occurs=word_count["

foo"];

2、讀取元素而又不插入該元素

find操作返回指向元素的迭代器,如果元素不存在,則返回end迭代器

STL map詳細用法

map翻譯為對映,我們之前所用到的int就是乙個int 對int的對映,我們還用到過char float,double,string 這都是int轉換各個型別的對映。使用map可以將任意型別的基本型別建立對映對映到任意基本型別,都包括stl的容器 若要使用map需要新增map標頭檔案除此之外還要新增...

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...