POSITION類型變數用於替換所有映射變數的入口。可以使用POSITION來“記憶”入口後遍歷映射。可能認為這種遍歷是通過關鍵碼值來依次進行的,但實際不是。
獲取元素的次序沒有確定。CMapStringToOb引入了宏IMPLEMENT_SERIAL,來支持其元素的串列化和轉儲。如果映射存儲到檔案檔案中,那么每一元素都可利用載入插入(<<)操作符或Serialize成員函式來依次進行串列化。
如果要了解有關在映射中進行個別元素的診斷轉儲(CString值或CObject內容),那么轉儲內容的深度必須為1或更大。
當CMapStringToOb對象或其元素被刪除,那么CString值或CObject指針將被刪除,而CObject指針參考的對象則不會被銷毀。
映射類的派生與列表的派生相似。下列是同CMapStringToOb類成員函式較相似類:
·CMapPtrToPtr ·CMapPtrToWord ·CMapStringToPtr ·CMapStringToString ·CMapWordToOb ·CMapWordToPtr |
CMapStringToOb類的成員
構造函式
CMapStringToOb構造一個將CObject值映射為CObject指針的收集 |
Lookup返回一個建立在CString值基礎上的CObject指針SetAt在映射中插入一個元素,但假如發現了相匹配的關鍵碼,則替換已經存在的元素operator []在映射中插入一個元素,它是代替SetAt的操作RemoveKey刪除關鍵碼指定的元素RemoveAll刪除映射中所有的元素GetStartPosition返回第一個元素的位置GetNextAssoc獲取循環中下一個元素 |
GetCount返回映射中元素的個數IsEmpty測試是否為空映射(即沒有元素) |
Lookup() 查詢映射到指定關鍵字的值,即根據一個CString值返回一個CObject指針。
SetAt() 向映射中插入一個元素,如果指定的關鍵字存在,替換原來的元素
operator [ ] 向映射中插入一個元素,其作用和SetAt()相同
RemoveKey() 查詢符合關鍵字的映射。如果發現,則刪除這個元素
RemoveAll() 風險映射中所有的元素
GetStarPosition() 獲得映射中第一個元素的位置。映射中第一個元素是不預知的,所以映射的第一個元素實際上沒有特定的意義。一般將這個值傳遞給GetNextAssoc()函式
GetNextAssoc() 獲得映射中指定位置處下一個元素,參數尤為需要注意的是第3個參數是個指針,如下:
rNextPosition | 指定一個以前GetNextAssoc或GetStartPosition函式調用返回的POSITION值的參考。 |
rKey | 指定被獲取元素(字元串)的返回關鍵碼。 |
rValue | 指定要獲取元素(CObject指針)的返回值,請參閱說明以獲取該參數的更多信息。 |
GetCount() 返回映射中的元素數目。
IsEmpty() 測試映射是否為空。
例子:
{
CMapStringToOb StrObMap;
//添加元素
int *p = new int;
*p = 3;
StrObMap.SetAt("Three", (CObject*&)p);
p = new int;
*p = 5;
StrObMap.SetAt("Five", (CObject*&)p);
//刪除元素
p = NULL;
POSITION pos = StrObMap.GetStartPosition();
while(pos)
{
CString str;
StrObMap.GetNextAssoc(pos,str,(void *&)p);
if ( NULL != p)
{
delete p;
p=NULL;
}
}
StrObMap.RemoveAll();
}