CMap?
:CMap은 MFC에서 제공되는 클래스 중 하나로 일종의 Hash Table을 만듭니다.
CMap을 왜 사용해야 하는가?
:Key 값으로 데이터를 다루기 때문에 순서가 상관없는 데이터의 경우 조회 속도가 상당히 빠릅니다.
CMap의 모습!!
CMap<KEY,ARG_KEY,VALUE,ARG_VALUE> 의 모습을 하고 있습니다.
KEY : CMap 내부에서 key를 관리하는 데이터 타입
ARG_KEY: CMap에게 key를 전달하는 데이터 타입
VALUE: CMap 내부에서 값을 관리하는 데이터 타입
ARG_VALUE: CMap에게 값을 전달하는 데이터 타입
예) CMap<CString, LPCTSTR , int, int> m_map;
m_map.SetAt("aaa",111); 을 코딩했다고 하면
map에게 키값으로 LPCTSTR형인 aaa를 던져 줄것이고 map 내부에서는 CString 형으로 관리하게 됩니다.
데이터(value)값으로 int형인 111을 던져줄것이고 map 내부에서는 int 형으로 관리하게 됩니다.
※사용법
#include "stdafx.h"
#define _AFXDLL
#include <afx.h>
#include <afxtempl.h>
#include <iostream>
#include <atlstr.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CMap<CString, LPCTSTR, int, int> m_map;
CString str1 = "홍길동";
CString str2 = "둘리";
m_map.SetAt(str1, 24);
m_map.SetAt(str2, 15);
m_map.SetAt(str1, 15);
CString str3 = "홍길동";
int number;
if (m_map.Lookup(str3, number))
{
cout << "있네" << endl;
cout << "데이터 값은:" << number << endl;
}
return 0;
}
CMap에 데이터를 넣을때는 SetAt(키,값)을 넣어주시면 되고
데이터를 넣기전 Lookup을 통해 데이터가 있는지 없는지 판단하고 넣어주는게 기본적인 원칙!!
왜냐하면 위의 코드를 보시면 str1,24 와 str1,15를 넣게 되면 키가 같을경우 마지막 키를 넣은 데이터가 값으로 저장되기 때문입니다.
Lookup에서 두번째 인자 즉, value의 경우 lvalue를 적어야 하는데 그럼 lvalue에 입력한 키와 매칭되는 데이터(값)이 저장됩니다.
'프로그래밍 > MFC' 카테고리의 다른 글
[MFC] LPSTR,LPCSTR,LPCTSTR .. 과연 무엇인가? (0) | 2018.07.11 |
---|---|
mfc 시간(년,월,일) 차이 구하기 (0) | 2018.06.19 |
DLL 개념 및 이유? (0) | 2018.06.04 |