본문 바로가기
C++

[C++] STL Map을 공부하자 key, value 개념

by 여름코딩 2024. 12. 30.
반응형

오늘은 C++ STL인 Map에 대해서 알아보자.

알고리즘을 학습하면서 Map을 활용하게 되어 개념을 정리하고 가려고 한다.

Map은 key와 value 쌍으로 이루어진 STL이다.

우선 STL이 뭔지에 대해서 간단히 알아보자.

STL이란?

STL은 Standard Template Library로 알고리즘이나 함수를 사용하기 쉽게 라이브러리화 시켜 놓은 것이다.

구성 요소로는 알고리즘, 컨테이너, 반복자, 함수자가 있다.

오늘 학습할 Map은 이 중에서 '컨테이너'에 해당한다.

흔히 Vector 컨테이너 라는 단어를 들어 보았을 것이다.

Vector는 데이터를 push해서 저장할 수 있는데, Map도 마찬가지로 데이터를 key와 value 쌍으로 저장할 수 있다.

Map 형태

그럼 이제 Map에 대해서 자세히 알아보자.

map<key, value> 맵이름;

 

위에서 이야기했듯, Map은 key와 value 쌍으로 구성된다.

key를 기준으로 자동 정렬되어 사용자가 임의로 sort 같은 함수를 써 정렬 할 필요가 없다.

Map 사용 방법

Map은 key와 value를 입력하기 때문에 아래와 같이 각 자료형을 작성해주면 된다.

map<string, int> m;

 

key는 string, value는 int형으로 선언했다.

그리고 Map의 이름은 m으로 작성했다.

이번에는 맵 m에 데이터를 저장해보자.

Map에 데이터를 저장할 때는 두 가지만 기억하면 된다.

첫 번째는 'insert', 두 번째는 '{}로 묶어주기'이다.

m.insert({"Jenny", 1});

 

데이터 삽입 명령은 insert로 하고, key와 value를 묶는건 {}이다.

이 두 가지만 기억하면 Map 사용법을 헷갈리지 않을 것이다.

이 때 key 값은 중복이 불가능함을 기억하자!

왜냐하면 아래와 같이 value 값을 대입하거나 증가/감소 연산해야 하기 때문이다.

m["Jenny"]++;
m["Chansoo"] = 2;

 

특정 key 값에 value 값을 대입하거나 이미 대입된 value 값을 key 값으로 찾아 증가/감소 하려면 key값이 중복되면 안될 것이다.

Map 읽기

배열을 읽을 땐 arr[0], vector를 읽을 땐 v[0] 이런 식으로 저장된 데이터를 읽었다.

Map도 마찬가지로 key값을 통해 value 값을 읽을 수 있다.

m["Jenny"];

 

key 값을 통해서 value 값을 확인한 예시이다.

이번에는 for문을 통해서 처음부터 끝까지 읽어보자.

for(auto iter : m)
{
        cout << iter.first << ", " << iter.second << endl;
}

 

auto는 타입 추론 키워드라고 한다.

조금 더 직관적으로 for문을 작성하려면 아래와 같이도 표현 가능하다.

for(auto iter = m.begin(); iter!=m.end(); iter++)
{
        cout << iter->first << ", " << iter->second << endl;
}

Map 데이터 찾기

가끔 알고리즘 문제를 풀다 보면 Map에 특정 key가 존재 할 경우 특정 코드를 실행하는 방식으로 코드를 구현해야 할 때가 있다. 이 때 for문으로 하나 하나 체크하도록 구현하기 보다는 아래와 같이 간단히 구현할 수 있다.

if(m.find("Apple") != m.end())
{
    cout << "바구니에 사과가 있다." << endl;
}
else
{
    cout << "사과가 없다." << endl;
}

 

Map의 끝까지 "Apple"을 찾아서 있으면 if문의 코드 실행, 없으면 else문 실행하는 것 같다.

Map 데이터 삭제

특정 데이터를 삭제하거나 전체 데이터를 삭제할 수 있다.

먼저 특정 데이터 삭제에는 erase를 사용한다.

m.erase("Chansso");

 

key 값을 이용해서 value와 함께 해당 쌍을 삭제할 수 있다.

그럼 이번에는 전체 데이터를 삭제해보자.

m.erase(m.begin(), m.end());

 

erase를 통해서 삭제하는데, 인자로 map의 처음부터 끝을 넣는 것이다.

또는 아래와 같이 clear를 활용해서도 가능하다.

m.clear();

 

굉장히 직관적인 방법이다.


오늘은 C++ STL인 Map에 대해서 알아보았다.

Map을 생성하고, 데이터를 저장하고 삭제하는 코드를 작성하면서 결과를 보는 연습을 하면 좋겠다.

그리고 데이터 저장 방법도 여러 가지이므로 각 방법의 차이를 인지하면서 코드 작성 연습을 하면 도움이 될 것이다.

반응형