std::map用法
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";
或者insert方法 enummap.insert(make_pair(1,"one"));
返回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
//find的時候注意key的資料型別,最好用cstring之類的能消除資料型別差異的key,否則可能會出現強制轉換後仍找不到的情況。
需要說明的是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個多星期來鑽研的結果,拿出來與大家分享。
最後,還有乙個clear(),不用問,全刪的時候就不要乙個乙個erase了,clear()就相當於enummap.erase(enummap.begin(), enummap.end()); map的遍歷: #include
#include
#include
using namespace std;
int main()
}
c 中map的用法
map是c 的乙個標準容器,她提供了很好一對一的關係,在一些程式中建立乙個map可以起到事半功倍的效果,總結了一些map基本簡單實用的操作!1.map最基本的建構函式 mapmapstring mapmapint mapmapstring map char string mapchar mapmap...
C 中Map的用法
map是一類關聯式容器。它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,可以修改實值,而不能修改key。自動建立key value的對應。key 和 value可以是任意你需要的型別。根據key值快速查詢記錄,查詢的複雜度基本是log n 如...
c 中map的用法
map是c 的乙個標準容器,她提供了很好一對一的關係,在一些程式中建立乙個map可以起到事半功倍的效果,總結了一些map基本簡單實用的操作!1.map最基本的建構函式 mapmapstring mapmapint mapmapstring map char string mapchar mapmap...