본문으로 바로가기

[STL]MAP(기본 개념 및 예시)

category c++/STL 2021. 1. 22. 18:56

<MAP이란>

중복을 허용하지 않는 key와 관련된 value를 관리하며.

내부적으로 검색 삽입 삭제가 되는 레드 블랙트리를 사용하고있고 MAP의 구조는 다음과 같다.

 

 

map 구조

<기본적인 MAP 사용>

map 해더

#include <map>

 

 

선언하기

map<string,int> m;

 

삽입하기

insert를 사용해서 추가하며 key값을 중복해서 사용못한다.

m.insert({"apple",500});

 

데이터 접근

map.begin();
=>map의 가장 첫번째 아이템을 가르키는 반복자를 가져옵니다.

map.end();
=>map의 가장 마지막 아이템+1을 가르키는 반복자를 가져옵니다.

 

(1) find 사용

find로 찾지 못했을경우 .end를 반환하는것을 이용해서 찾는다.

 if (m.find("apple") != m.end())
        printf("apple find!\n");
    else
        printf("not find");

 

(2)for 사용

조회를 위해 iterator를 사용해야하며 iter->first를 통해 접근한다

자세한 iter구조는 맨 아래 디버깅 모습을 통해 이해할 수 있다. 
//using iter---------------------------------------------
    map<string,int>::iterator iter;


    //search map in m by begin,first,second------------------
    printf("\n\n<search map> in m\n");
    for (iter = m.begin(); iter != m.end();iter++){
        cout << iter->first<<" "<<iter->second<<endl;
    }

 

삭제하기

m.erase("banana");

 

전체 활용

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<string,int> m;

    // data insert--------------------------------------------
    m.insert({"apple",3000});
    m.insert({"banana",4000});
    m.insert({"banana",5000});
    m.insert({"mallon",6000});


    // apple data search--------------------------------------
    printf("<search apple>\n");
    if (m.find("apple") != m.end())
        printf("apple find!\n");
    else
        printf("not find");


    //using iter---------------------------------------------
    map<string,int>::iterator iter;


    //search map in m by begin,first,second------------------
    printf("\n\n<search map> in m\n");
    for (iter = m.begin(); iter != m.end();iter++){
        cout << iter->first<<" "<<iter->second<<endl;
    }

    //remove banana-------------------------------------------
    m.erase("banana");


    //search map in m-----------------------------------------
    printf("\n\n<search map> in m after erase\n");
    for (iter = m.begin(); iter != m.end();iter++){
        cout << iter->first<<" "<<iter->second<<endl;
    }


    return 0;
}

 

디버깅 및 출력 화면

 

참조:life-with-coding.tistory.com/305

참조:https://en.cppreference.com/w/cpp/container/map

 

'c++ > STL' 카테고리의 다른 글

[STL]MAP(구조체 활용)  (0) 2021.01.23