日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

std::map用法

發布時間:2023/12/10 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 std::map用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

std::map用法

STL是標準C++系統的一組模板類,使用STL模板類最大的好處就是在各種C++編譯器上都通用。 在STL模板類中,用于線性數據存儲管理的類主要有vector, list, map 等等。本文主要針對map對象,結合自己學習該對象的過程,講解一下具體用法。本人初學,水平有限,講解差錯之處,請大家多多批評指正。 map對象所實現的功能跟MFC得CMap相似,但是根據一些文章的介紹和論述,MFC CMap在個方面都與STL map有一定的差距,例如不是C++標準,不支持賦值構造,對象化概念不清晰等等。 使用map對象首先要包括頭文件,包含語句中必須加入如下包含聲明 #include <map> 注意,STL頭文件沒有擴展名.h 包括頭文件后就可以定義和使用map對象了,map對象是模板類,需要關鍵字和存儲對象兩個模板參數,例如: std:map<int, CString> enumMap; 這樣就定義了一個用int作為關鍵字檢索CString條目的map對象,std表示命名空間,map對象在std名字空間中,為了方便,在這里我仍然使用了CString類,其實應該使用標準C++的std::string類,我們對模板類進行一下類型定義,這樣用的方便,當然,不定義也可以,代碼如下: typedef std:map<int, CString> UDT_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個多星期來鉆研的結果,拿出來與大家分享。 最后,還有一個empty(),不用問,全刪的時候就不要一個一個erase了,empty()就相當于enumMap.erase(enumMap.begin(), enumMap.end()); map的遍歷: #include<map>
#include<string>
#include<iostream>
using namespace std;

int main()
{
??? map<string,int>? m;
??? m["a"]=1;
??? m["b"]=2;
??? m["c"]=3;
??? map<string,int>::iterator it;
??? for(it=m.begin();it!=m.end();++it)
???? ?? cout<<"key: "<<it->first <<" value: "<<it->second<<endl;
??? return?? 0;
}

map<string,int>::iterator it;?? 定義一個迭代指針it。? it->first 為索引鍵值,it->second 為值。
? 在對象中應用時,最好在析構函數中要調用它的clear方法, 例如class a{ map<int,int> m; ~a(){ m.clear(); } }

總結

以上是生活随笔為你收集整理的std::map用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。