map類的應用

2021-05-23 09:07:47 字數 2172 閱讀 6648

stl是標準c++系統的一組模板類,使用stl模板類最大的好處就是在各種c++編譯器上都通用。

在stl模板類中,用於線性資料儲存管理的類主要有vector, list, map 等等。本文主要針對map物件,結合自己學習該物件的過程,講解一下具體用法。本人初學,水平有限,講解差錯之處,請大家多多批評指正。

map物件所實現的功能跟mfc得cmap相似,但是根據一些文章的介紹和論述,mfc cmap在個方面都與stl map有一定的差距,例如不是c++標準,不支援賦值構造,物件化概念不清晰等等。

使用map物件首先要包括標頭檔案,包含語句中必須加入如下包含宣告

#include

注意,stl標頭檔案沒有副檔名.h

包括標頭檔案後就可以定義和使用map物件了,map物件是模板類,需要關鍵字和儲存物件兩個模板引數,例如:

std:mapenummap;

這樣就定義了乙個用int作為關鍵字檢索cstring條目的map物件,std表示命名空間,map物件在std名字空間中,為了方便,在這裡我仍然使用了cstring類,其實應該使用標準c++的std::string類,我們對模板類進行一下型別定義,這樣用的方便,當然,不定義也可以,**如下:

typedef std:mapudt_map_int_cstring;

udt_map_int_cstring enummap;

如此map物件就定義好了,增加,改變map中的條目非常簡單,因為map類已經對操作符進行了過載,**如下:

enummap[1] = "one";

enummap[2] = "two";

.....

enummap[1] = "one edit";

返回map中目前儲存條目的總數用size()方法:

int nsize = enummap.size();

查詢map中是否包含某個關鍵字條目用find方法,傳入的引數是要查詢的key,在我們的例子裡,是乙個int資料,map中的條目資料是順序儲存的,被稱作為乙個sequence,在這裡需要提到的是begin()和end()兩個成員,分別代表map物件中第乙個條目和最後乙個條目,這兩個資料的型別是iterator,iterator被定義為map中條目的型別,查詢是否包含某個條目的**如下:

int nfindkey = 2;??????????? //要查詢的key

udt_map_int_cstring::iterator it;??? //定義乙個條目變數(實際是指標)

it = enummap.find(nfindkey);

if(it == enummap.end())

else

需要說明的是iterator, begin(), end()是stl模板類的乙個通用概念,操作方法也大同小異

通過map物件的方法獲取的iterator資料型別是乙個std::pair物件,包括兩個資料 iterator.first 和 iterator.second 分別代表關鍵字和儲存的資料

移除某個條目用erase() 該成員方法的定義如下

iterator erase(iterator it);

iterator erase(iterator first, iterator last);

size_type erase(const key& key);

分析一下這三個過載方法定義,大家不用說也能看明白一點點了吧,第乙個通過乙個條目物件刪除,這個物件可以從find之類的方法獲得,第二個定義刪除乙個範圍,需要乙個起始條目和乙個終止條目,第三個通過關鍵字刪除,這個與我們的想法和習慣最接近,**例子如下:

enummap.erase(1);??????????? //刪掉關鍵字「1」對應的條目

enummap.erase(enummap.begin());??????? //刪掉第乙個條目

enummap.erase(enummap.begin(), enummap.begin() + 1);??? //刪掉起始的兩個條目

呵呵,增刪改查都說完了,相信讀過本文,map物件也應該會使用了,這些是我1個多星期來鑽研的結果,拿出來與大家分享。

最後,還有乙個empty(),不用問,全刪的時候就不要乙個乙個erase了,empty()就相當於enummap.erase(enummap.begin(), enummap.end());

msdn裡面有關於map的幫助,需要的時候也可以查,不過可惜的是方法說明有,可是使用講解就少的可憐了,畢竟map還是cmap的競爭對手啊!

map的初級應用

map實際採用了紅黑樹的實現,在此,我們先不討論map的底層實現結構原理,先來看看map究竟是怎麼用,以及我是怎麼看待map的.先上 1 include 2 include 3 include 4 using namespace std 5int main 6 上述 描述了關於map的應用,從中可以...

map和Treeview的應用

新增乙個樹形列表,單擊樹形列表的某一項返回對應的id值,在這裡考慮用map存放屬性列表的名字和id值,可以用map key text 將對應資料存入map,然後建立樹形列表 ttreenode firstnode null map iterator it map.begin map iterator...

Map的應用(持續更新)

最近在工作中,用到的map的特性,與大家分享一下 1 進行字母頻次統計,片語統計等等 public class statistic else statistic.put key,result public string tostring return sb.tostring 2 解決多對一的問題。案...