2. Console 예제를 수정하여, 다음 표의 데이터를 보관한다. 그리고 이름을 입력하면 키와 몸무게를 출력하라.

 

이름

(cm)

몸무게(kg)

홍길동

172

72

박철수

164

67

오영희

166

51

구오성

182

80

김순희

159

48

최성주

177

69

신여정

172

51

 

보통 맵을 사용하는 것과 동일하지만, 키 외에 저장되는 데이터가 하나 이상이므로 구조체를 사용해야 한다. 따라서 PHYSIQUE 라는 구조체를 사용하여 CMapStringToPtr 객체에 저장한 후, 입력한 이름을 검색하여 해당 키와 몸무게를 출력한다. CMapStringToPtr 객체에 데이터를 저장할 때 new 연산자를 사용하여 메모리를 할당하므로, 프로그램을 종료할 때 반드시 메모리를 모두 해제해 주어야 한다.

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

            

             else

             {

                     CMapStringToPtr mapData;

 

                     mapData["홍길동"] = new PHYSIQUE(172, 72);

                     mapData["박철수"] = new PHYSIQUE(164, 67);

                     mapData["오영희"] = new PHYSIQUE(166, 51);

                     mapData["구오성"] = new PHYSIQUE(182, 80);

                     mapData["김순희"] = new PHYSIQUE(159, 48);

                     mapData["최성주"] = new PHYSIQUE(177, 69);

                     mapData["신여정"] = new PHYSIQUE(172, 51);

 

                     cout << "이름을 입력하면 키와 몸무게를 알 수 있습니다" << endl;

 

                     TCHAR szName[100];

                     CString strName;

                     void *pData;

 

                     cin >> szName;

                     strName = szName;

 

                     if (mapData.Lookup(strName, pData) == TRUE)

                     {

                                PPHYSIQUE pphysique = (PPHYSIQUE)pData;

                                cout << (LPCTSTR)strName << "의 키: " << pphysique->uiHeight;

                                cout << ", 몸무게: " << pphysique->uiWeight << endl;

                     }

                     else

                                cout << "존재하지 않는 이름입니다" << endl;

 

                     POSITION pos = mapData.GetStartPosition();

                     while (pos)

                     {

                                mapData.GetNextAssoc(pos, strName, pData);

                                delete pData;

                     }

             }

            

}


MFC 템플릿을 사용하기 위해 다음과 같이 afxtempl.h 헤더 파일이 필요하다. PHYSIQUE 는 키와 몸무게를 UINT 멤버로 포함하는 구조체다.

#include "afxtempl.h"

 

typedef struct tagPHYSIQUE

{

           tagPHYSIQUE() {

           };

           tagPHYSIQUE(UINT uiH, UINT uiW)

                     : uiHeight(uiH), uiWeight(uiW) {

           };

 

           UINT    uiHeight;

           UINT    uiWeight;

 

} PHYSIQUE, *PPHYSIQUE;


+ Recent posts