C 學習之map型別

2021-06-27 04:24:59 字數 2975 閱讀 2389

1。目錄

map簡介

map的功能

map的定義

在map中新增元素

查詢並獲取map中的元素

從map中刪除元素

map物件的迭代遍歷 

2。map簡介

map是一類關聯式容器,它是模板類。關聯的本質在於元素的值與某個特定的鍵相關聯,而並非通過元素在陣列中的位置類獲取。它的特點是增加和刪除節點對迭代器的影響很小,除了操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,不可以修改鍵值,只能修改其對應的實值。

3。map的功能

自動建立key - value的對應。key 和 value可以是任意你需要的型別,但是需要注意的是對於key的型別,唯一的約束就是必須支援《操作符。

根據key值快速查詢記錄,查詢的複雜度基本是log(n

),如果有1000個記錄,最多查詢10次,1,000,000個記錄,最多查詢20次。

快速插入key - value 記錄。

快速刪除記錄

根據key 修改value記錄。

遍歷所有記錄。

4。map的定義

使用map得包含map類所在的標頭檔案:#include //注意,stl標頭檔案沒有副檔名.h

map物件是模板類,需要關鍵字和儲存物件兩個模板引數,基本的定義模式如下:

std:mappersonnel;

這樣就定義了乙個以int為鍵,值為string的map物件personnel。

map中定義了以下三個型別:

對迭代器進行解引用時,將獲得乙個引用,指向容器中乙個value_type型別的值,對於map容器,其value_type是pair型別。

為了使用方便,可以對模板類進行一下型別定義,

typedef mapudt_map_int_cstring; 

udt_map_int_cstring enummap;

5。在map中新增元素

給map中新增元素主要有兩種方法:

for example:

mapword_count; // 定義了乙個空的map物件word_count;

word_count["anna"] = 1;

程式說明:

1.在word_count中查詢鍵為anna的元素,沒有找到.

2.將乙個新的鍵-值對插入到word_count中,他的鍵是const string型別的物件,儲存anna。而他的值則採用直初始化,這就意味著在本例中指為0.

3.將這個新的鍵-值對插入到word_count中

4.讀取新插入的元素,並將她的值賦為1.

使用下標訪問map與使用下標訪問陣列或者vector的行為是截然不同的:使用下標訪問不存在的元素將導致在map容器中新增乙個新的元素,他的鍵即為該下標值。

map容器提供的insert操作:

1. map.insert(e) : e是乙個用在map中的value_type型別的值。如果鍵不存在,則插入乙個值為e.second的新元素;如果鍵在map中已經存在,那麼不進行任何操作。該函式返回乙個pair型別,該pair型別的first元素為當前插入e的map迭代器,pair的second型別是乙個bool型別,表示是否插入了該元素。

2. map.insert(beg, end) : beg和end是迭代器,返回void型別

3. map.insert(iter, e) : e是value_type型別的值,如果e.first不在map中,則建立新元素,並以迭代器iter為起點搜尋新元素儲存的位置,返回乙個迭代器,指向map中具有給定鍵的元素。

for example:

word_count.insert(map::value_type("anna", 1));

word_count.insert(make_pair("anna", 1)); 

返回值:如果該鍵已在容器中,則其關聯的值保持不變,返回的bool值為true。

6。查詢並獲取map中的元素

使用下標獲取元素存在乙個很危險的***:如果該鍵不在map容器中,那麼下標操作會插入乙個具有該鍵的新元素。

因此引入map物件的查詢操作:

map.count(k) : 返回map中鍵k的出現次數(對於map而言,由於乙個key對應乙個value,因此返回只有0和1,因此可以用此函式判斷k是否在map中)

map.find(k) :  返回map中指向鍵k的迭代器,如果不存在鍵k,則返回超出末端迭代器。

for example:

int occurs = 0;

if( word_count.cout("foobar") )

occurs = word_count["foobar"];

int occurs = 0;

map::iterator it = word_count.find("foobar");

if( it != word_count.end() )

occurs = it ->second;

7。從map中刪除元素

移除某個map中某個條目用erase()

該成員方法的定義如下:

iterator erase(iterator it); //通過乙個條目物件刪除

iterator erase(iterator first, iterator last);        //刪除乙個範圍

size_type erase(const key& key); //通過關鍵字刪除

8. map物件的迭代遍歷

與其他容器一樣,map同樣提供begin和end運算,以生成用於遍歷整個容器的迭代器。

**於

C 學習之map型別

1。目錄 map簡介 map的功能 map的定義 在map中新增元素 查詢並獲取map中的元素 從map中刪除元素 map物件的迭代遍歷 2。map簡介 map是一類關聯式容器,它是模板類。關聯的本質在於元素的值與某個特定的鍵相關聯,而並非通過元素在陣列中的位置類獲取。它的特點是增加和刪除節點對迭代...

C 學習之map型別

1。目錄 map簡介 map的功能 map的定義 在map中新增元素 查詢並獲取map中的元素 從map中刪除元素 map物件的迭代遍歷 2。map簡介 map是一類關聯式容器,它是模板類。關聯的本質在於元素的值與某個特定的鍵相關聯,而並非通過元素在陣列中的位置類獲取。它的特點是增加和刪除節點對迭代...

C 標準庫型別 map

標準庫型別 map 就是字典,每個元素是一組鍵值對。使用紅黑樹實現。include 宣告乙個空的字典,鍵為int,值為string map m 聲名並初始化map map m1 clear 清除 map 中所有元素 erase 刪除 map 中指定的元素 insert 新增 pair 型別的元素 f...