1、使用map 使用map得包含map類所在的標頭檔案#include <map> //注意,STL標頭檔案沒有副檔名.h map物件是模板類,需要關鍵字和儲存物件兩個模板引數:std:map<int, string> personnel;這樣就定義了一個用int作為索引,並擁有相關聯的指向string的指標. 為了使用方便,可以對模板類進行一下型別定義, typedef map<int, CString> UDT_MAP_INT_CSTRING; UDT_MAP_INT_CSTRING enumMap;
2、在map中插入元素 改變map中的條目非常簡單,因為map類已經對[]運算子進行了過載 enumMap[1] = "One";enumMap[2] = "Two";..... 這 樣非常直觀,但存在一個性能的問題。插入2時,先在enumMap中查詢主鍵為2的項,沒發現,然後將一個新的物件插入enumMap,鍵是2,值是一個 空字串,插入完成後,將字串賦為"Two"; 該方法會將每個值都賦為預設值,然後再賦為顯示的值,如果元素是類物件,則開銷比較大。可以用以下方法來避免開銷: enumMap.insert(map<int, CString> :: value_type(2, "Two"))
3、查詢並獲取map中的元素 下標運算子給出了獲得一個值的最簡單方法: CString tmp = enumMap[2]; 但是,只有當map中有這個鍵的例項時才對,否則會自動插入一個例項,值為初始化值。 可以使用Find()和Count()方法來發現一個鍵是否存在。 查詢map中是否包含某個關鍵字條目用find()方法,傳入的引數是要查詢的key,在這裡需要提到的是begin()和end()兩個成員,分別代表map物件中第一個條目和最後一個條目,這兩個資料的型別是iterator. int nFindKey = 2; //要查詢的Key//定義一個條目變數(實際是指標)UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey); if(it == enumMap.end()) { //沒找到}else { //找到} 透過map物件的方法獲取的iterator資料型別是一個std::pair物件,包括兩個資料 iterator->first 和 iterator->second 分別代表關鍵字和儲存的資料
4、從map中刪除元素 移除某個map中某個條目用erase() 該成員方法的定義如下 iterator erase(iterator it); //透過一個條目物件刪除 iterator erase(iterator first, iterator last); //刪除一個範圍 size_type erase(const Key& key); //透過關鍵字刪除 clear()就相當於 enumMap.erase(enumMap.begin(), enumMap.end());
1、使用map 使用map得包含map類所在的標頭檔案#include <map> //注意,STL標頭檔案沒有副檔名.h map物件是模板類,需要關鍵字和儲存物件兩個模板引數:std:map<int, string> personnel;這樣就定義了一個用int作為索引,並擁有相關聯的指向string的指標. 為了使用方便,可以對模板類進行一下型別定義, typedef map<int, CString> UDT_MAP_INT_CSTRING; UDT_MAP_INT_CSTRING enumMap;
2、在map中插入元素 改變map中的條目非常簡單,因為map類已經對[]運算子進行了過載 enumMap[1] = "One";enumMap[2] = "Two";..... 這 樣非常直觀,但存在一個性能的問題。插入2時,先在enumMap中查詢主鍵為2的項,沒發現,然後將一個新的物件插入enumMap,鍵是2,值是一個 空字串,插入完成後,將字串賦為"Two"; 該方法會將每個值都賦為預設值,然後再賦為顯示的值,如果元素是類物件,則開銷比較大。可以用以下方法來避免開銷: enumMap.insert(map<int, CString> :: value_type(2, "Two"))
3、查詢並獲取map中的元素 下標運算子給出了獲得一個值的最簡單方法: CString tmp = enumMap[2]; 但是,只有當map中有這個鍵的例項時才對,否則會自動插入一個例項,值為初始化值。 可以使用Find()和Count()方法來發現一個鍵是否存在。 查詢map中是否包含某個關鍵字條目用find()方法,傳入的引數是要查詢的key,在這裡需要提到的是begin()和end()兩個成員,分別代表map物件中第一個條目和最後一個條目,這兩個資料的型別是iterator. int nFindKey = 2; //要查詢的Key//定義一個條目變數(實際是指標)UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey); if(it == enumMap.end()) { //沒找到}else { //找到} 透過map物件的方法獲取的iterator資料型別是一個std::pair物件,包括兩個資料 iterator->first 和 iterator->second 分別代表關鍵字和儲存的資料
4、從map中刪除元素 移除某個map中某個條目用erase() 該成員方法的定義如下 iterator erase(iterator it); //透過一個條目物件刪除 iterator erase(iterator first, iterator last); //刪除一個範圍 size_type erase(const Key& key); //透過關鍵字刪除 clear()就相當於 enumMap.erase(enumMap.begin(), enumMap.end());