본문 바로가기
프로그래밍

👨‍💻 [MFC] MFC 에서 Map 에 Key 값이 존재하는지 확인하는 방법은 어떻게 되나요?

by 밝음의기둥 2024. 9. 20.
반응형

👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

MFC에서 map으로 사용할 수 있는 것이 두가지가 있습니다. CMap 클래스와 std::map 입니다. 이 두가지 경우에서 각각 Key 값이 존재하는지 확인하는 방법이 어떻게 되는지 알아보았습니다.


질문 >

MFC 에서 CMap 클래스에 Key 값이 존재하는지 확인하는 방법은 어떻게 되나요?

답변 >

MFC에서 CMap 클래스는 키-값 쌍을 저장하고 관리하는 데 사용됩니다. CMap에서 특정 키가 존재하는지 확인하려면 Lookup 또는 GetNextAssoc 메서드를 사용할 수 있습니다.

1. Lookup 메서드 사용

Lookup 메서드는 CMap에 특정 키가 존재하는지 확인하고, 해당 키가 존재하면 그 키에 해당하는 값을 반환합니다.

예시 코드:

CMap<int, int, CString, CString> myMap;
myMap.SetAt(1, _T("Value 1"));
myMap.SetAt(2, _T("Value 2"));

CString value;
if (myMap.Lookup(1, value))
{
    AfxMessageBox(_T("키 1이 존재합니다. 값은: ") + value);
}
else
{
    AfxMessageBox(_T("키 1이 존재하지 않습니다."));
}

설명:

  • Lookup(key, value): key가 맵에 존재하면 TRUE를 반환하고, value에 해당하는 값을 저장합니다. 키가 존재하지 않으면 FALSE를 반환합니다.

2. GetNextAssoc 메서드 사용 (순차적으로 키를 탐색)

GetNextAssoc는 CMap을 순차적으로 탐색하는 데 사용됩니다. 이는 주로 for 루프에서 모든 키와 값을 탐색할 때 유용합니다.

예시 코드:

CMap<int, int, CString, CString> myMap;
myMap.SetAt(1, _T("Value 1"));
myMap.SetAt(2, _T("Value 2"));

POSITION pos = myMap.GetStartPosition();
int key;
CString value;

while (pos != NULL)
{
    myMap.GetNextAssoc(pos, key, value);
    if (key == 1)
    {
        AfxMessageBox(_T("키 1이 존재합니다. 값은: ") + value);
        break;
    }
}

설명:

  • GetStartPosition: 맵의 첫 번째 키-값 쌍을 탐색하는 위치를 반환합니다.
  • GetNextAssoc(pos, key, value): pos에 있는 다음 키-값 쌍을 반환하고, 다음 위치로 이동합니다.

요약

  • 키가 존재하는지 확인하는 가장 간단한 방법은 Lookup 메서드를 사용하는 것입니다. 이 메서드는 키가 존재하는지 여부를 확인하고, 존재하면 그에 해당하는 값을 반환합니다.
  • *GetNextAssoc*는 맵을 순차적으로 탐색할 때 사용됩니다.

질문 >

MFC 에서 std::map 에 Key 값이 존재하는지 확인하는 방법은 어떻게 되나요?

답변 >

MFC에서 std::map을 사용할 때, 특정 키가 존재하는지 확인하려면 std::map의 멤버 함수인 find 또는 count를 사용할 수 있습니다. 두 방법 모두 std::map에 특정 키가 존재하는지 확인하는 데 유용합니다.

1. find 함수 사용

find 함수는 주어진 키를 검색하고, 해당 키가 존재하면 그 위치를 반환합니다. 만약 키가 존재하지 않으면 end()를 반환합니다.

예시 코드:

#include <map>
#include <string>
#include <afxwin.h>  // MFC 헤더 파일

void CheckKeyWithFind()
{
    std::map<int, std::string> myMap;
    myMap[1] = "Value 1";
    myMap[2] = "Value 2";

    int keyToFind = 1;
    auto it = myMap.find(keyToFind);

    if (it != myMap.end())
    {
        CString msg;
        msg.Format(_T("키 %d가 존재합니다. 값은: %s"), keyToFind, CString(it->second.c_str()));
        AfxMessageBox(msg);
    }
    else
    {
        AfxMessageBox(_T("키가 존재하지 않습니다."));
    }
}

설명:

  • find(key): 주어진 키를 찾고, 키가 존재하면 그에 대한 반복자(iterator)를 반환합니다. 키가 존재하지 않으면 end() 반복자를 반환합니다.
  • it->second: find가 반환한 반복자의 second는 해당 키에 연관된 값을 나타냅니다.

2. count 함수 사용

count 함수는 주어진 키가 맵에 몇 개 있는지 반환합니다. std::map은 키가 중복될 수 없기 때문에, 이 함수는 항상 0 또는 1을 반환합니다. count가 1이면 키가 존재하는 것이고, 0이면 키가 존재하지 않습니다.

예시 코드:

#include <map>
#include <string>
#include <afxwin.h>  // MFC 헤더 파일

void CheckKeyWithCount()
{
    std::map<int, std::string> myMap;
    myMap[1] = "Value 1";
    myMap[2] = "Value 2";

    int keyToFind = 1;

    if (myMap.count(keyToFind) > 0)
    {
        CString msg;
        msg.Format(_T("키 %d가 존재합니다."), keyToFind);
        AfxMessageBox(msg);
    }
    else
    {
        AfxMessageBox(_T("키가 존재하지 않습니다."));
    }
}

설명:

  • count(key): 맵에서 주어진 키가 몇 개 있는지 반환합니다. std::map에서는 중복된 키가 없기 때문에, 키가 존재하면 1을, 존재하지 않으면 0을 반환합니다.

요약

  • find 함수: 키를 검색하고, 해당 키가 존재하면 반복자를 반환하며, 존재하지 않으면 end()를 반환합니다.
  • count 함수: 키가 맵에 존재하는지 여부를 0 또는 1로 반환합니다.

둘 다 키 존재 여부를 확인하는 데 효과적이며, find는 키가 존재할 때 그 값에도 접근할 수 있는 반면, count는 키 존재 여부만 확인할 때 간단하게 사용할 수 있습니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형