본문으로 바로가기

[MFC] CMap 사용방법

category 프로그래밍/MFC 2018. 7. 24. 13:54

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