조회 수 50717 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

CMap은 사전이라고 생각하시면 됩니다.
CArray는 배열이죠.
그래서 첨자에 의해서, 즉 순서를 지정해서 값을 저장하고 읽습니다.
하지만 CMap은 순서가 아니라 키에 의해서 값을 저장하고 읽게 됩니다.


예를 들어서, 영한 사전을 생각해보세요.
boy라는 영어 단어와 소년이라는 해석은 쌍으로 존재할 때 의미가 있습니다.


만약 배열을 쓴다고 하면,
영어 단어 배열과 한글 해석 배열, 이렇게 두개가 필요합니다.
그리고 어떤 영어 단어의 해석을 보고 싶다면
영어 단어 배열에서의 해당 단어 위치를 구하고,
한글 해석 배열의 해당 위치의 해석을 꺼내야 합니다.


하지만 CMap을 사용하면,
키와 값을 한꺼번에 저장하고 읽을 수 있습니다.
boy를 키로 저장하면서 동시에 소년이라는 해석도 값으로써 저장할 수 있죠.
CMap은 이 두개를 한꺼번에 저장하므로 CMap 하나만 있으면 됩니다.
그리고 boy라는 단어의 해석을 알고 싶을 때는,
키가 boy인 값을 Lookup()으로 구하면 됩니다.


이렇게 키와 값으로 구성되는 데이터를 처리할 때 CMap을 사용하며,
키는 CMap 내부에서 해싱 함수를 통해 특별한 값으로 변환하여 내부 인덱스로 사용하게 됩니다.


CMap을 사용해서 변수를 만들 때는 데이터 타입을 4가지 지정해줘야 합니다.
첫번째는 CMap 내부에서 키를 관리할 때 사용하는 데이터 타입이고,
두번째는 코드에서 CMap에게 키를 전달할 때 어떤 타입으로 전달하는지 입니다.
세번째는 CMap 내부에서 값을 관리할 때 사용하는 데이터 타입이고,
네번째는 코드에서 CMap에게 값을 전달할 때 어떤 타입으로 전달하는지 입니다.


CMap  my_map;
이렇게 맵을 만들었다면,
이 맵에게 키를 줄 때는 int형(두번째)으로 줄 것이고,
맵 안에서는 키를 int형으로 관리하게 됩니다.
그리고 코드에서 값을 줄 때 double형(네번째)으로 줄 것이고,
이 값을 받아서 맵 안에서는 double형으로 관리하게 됩니다.


맵에 값을 넣을 때는
SetAt() 멤버 함수를 호출합니다.
혹은 배열처럼 [] 연산자를 사용할 수도 있죠.


맵에서 값을 찾을 때는 Lookup()을 사용합니다.


그리고 맵에서 하나의 키와, 그 키의 값을 삭제할 때는 RemoveKey()를 쓰며,


맵에 저장된 모든 키와 그 키들의 값들을 모두 삭제할 때는 RemoveAll()을 씁니다.


맵에 저장된 키-값의 쌍의 갯수를 얻고 싶을 때는 GetCount()를 쓰며,
맵이 비어 있는지 알고 싶을 땐 IsEmpty()를 호출할 수 있습니다.


그리고 맵에 저장된 모든 값들을 순서적으로 한번씩 읽고 싶을 땐,
GetStartPosition()으로 첫 키의 위치를 얻고,
GetNextAssoc()을 반복해서 호출하여 각 키와 값을 얻을 수 있습니다.


#include "stdafx.h"
#include <afxtempl.h>

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nValue = 0;
    CString strKey;
    POSITION pos = NULL;
    CMap<CString, LPCSTR, int, int> m;

    /* 1. add key and value */
    m.SetAt("AAA", 111);
    m.SetAt("ABC", 123);

    /* 2. lookup key 'AAA' */
    if ( m.Lookup("AAA", nValue) )
        printf("find 'AAA' = %d\n", nValue);
    else
        printf("no such key\n");

    /* 3. replace key and value */
    m.SetAt("AAA", 333);

    if ( m.Lookup("AAA", nValue) )
        printf("find 'AAA' = %d\n", nValue);
    else
        printf("no such key\n");

    /* 4. iterate map */
    pos = m.GetStartPosition();

    while ( pos != NULL )
    {
        m.GetNextAssoc(pos, strKey, nValue);
        printf("%s = %d\n", strKey.operator LPCTSTR(), nValue);
    }

    /* 5. remove 'AAA' key */
    m.RemoveKey("AAA");

    /* 6. iterate map after removing 'AAA' key */
    pos = m.GetStartPosition();

    while ( pos != NULL )
    {
        m.GetNextAssoc(pos, strKey, nValue);
        printf("%s = %d\n", strKey.operator LPCTSTR(), nValue);
    }

    /* 7. print map count */
    printf("a saved number of key in map is %d\n", m.GetCount());

    /* 8. remove all existing key pair */
    m.RemoveAll();
    printf("a saved number of key in map is %d\n", m.GetCount());

    return 0;
}
 

48da222bd0597&filename=map.PNG


Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
446 Android Android Animation Interpolator(보간기) 종류 2020.12.01 5234 0
445 Python pandas, matplot 자주사용하는 코드 2019.03.06 5237 0
444 PHP SQL 일정 시간단위로 데이터 검색하기 2020.02.12 5247 0
443 LINUX Ubuntu php5.6 , php7.1 설치 및 셋팅하기 2020.02.11 5404 0
442 Python [tensorflow] 텐서플로우 문서 한글번역본 2018.03.22 5462 0
441 Python [tensorflow] 선형회귀 예제 2018.02.05 5664 0
440 LINUX vi 설정하기(.vimrc) 2019.02.01 5767 0
439 Android [Git] git add 취소하기, git commit 취소하기, git push 취소하기 2021.09.30 5777 0
438 Pi 아두이노에 도움이 되는 전자부품들 2018.06.20 5895 0
437 Pi 라즈베리파이를 NAS로 사용하기 2017.10.18 5936 0
436 HTML5 [Javascript] Promise 이해하기 2018.01.04 5975 0
435 Android 맨날 까먹는 버튼 클릭 이벤트 핸들러 코드 2014.12.17 6052 0
434 Python 디렉토리 없으면 만들기 2019.03.30 6208 0
433 일반 Common LDAP Queries 2015.05.13 6224 0
432 Pi 부품 구매 2016.11.15 6255 0
목록
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5