MFC 맵 클래스
MFC 맵 클래스
맵은 데이터를 저장할때 키를 이용하여 저장 위치를 결정하는 자료구조
일반적으로 해시테이블 이란 용어를 사용
템플릿클래스
#include <afxtempl.h> 필요
CMap 사용자정의 자료형, CMap(CString, CString&, CPoint, CPoint&) map;
비템플릿 클래스
자주 쓰이는 자료형을 바로 쓸 수 있게 클래스 제공
#include <afxcoll.h> 필요
클래스이름 자료형(키 -> 데이터) 사용예
CMapWordToOb WORD -> CObject포인터 CMapWordToOb map;
CMapWordToPtr WORD -> void포인터
CMapPtrToWord void포인터 -> WORD
CMapPtrToPtr void포인터 -> void포인터
CMapStringToOb 문자열 -> CObject포인터
CMapStringToPtr 문자열 -> void포인터
CMapStringToString 문자열 -> 문자열
템플릿 맵 클래스
비템플릿 클레스에서 제공하지 않는 자료형인 경우 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
#include <afxtempl.h>
template <> UINT AFXAPI HashKey(CString& str)
{ // 기존 제공되는 HashKey() 와 유사
LPCTSTR key = (LPCTSTR)str;
UINT nHash = 0;
while(*key)
nHash = (nHash << 5) + nHash + *key++;
return nHash;
}
CMap<CString, CString&, UINT, UINT&> map;
map[CString("사과")] = 10;
map[CString("딸기")] = 25;
map[CString("포도")] = 40;
map[CString("수박")] = 15;
UINT nCount;
if (map.Lookup(CString("수박"), nCount))
cout << "수박" << nCount << "상자가 남았습니다." << endl; |
cs |
UINT AFXAPI HashKey(WORD key)
UINT AFXAPI HashKey(void* key)
UINT AFXAPI HashKey(LPCTSTR key)
MFC는 위 3가지 해시함수를 기본 제공하나 WORD, void*, LPCTSTR 아닌경우 위 소스와 같이 직접 HashKey()를 만들어줘야 한다. 그렇지 않으면 컴파일되지 않는다.
http://petra.tistory.com/877 (참고)
기본제공되는 HashKey() 참고 (큰 차이 없음)
1
2
3
4
5
6
7 |
UINT AFXAPI CMapStringToString::HashKey(LPCTSTR key)
{
UINT nHash = 0;
while (*key)
nHash = (nHash << 5) + nHash + *key;
return nHas
} |
cs |