PL 문법/C++

[C++] STL map / multimap 사용법

jHoon0223 2021. 8. 26. 22:20
  • map / multimap 이란?

map / multimap C++ 표준 라이브러리(Standard Template Library)에 있는 컨테이너로, <map> 헤더 안에 포함되어 있다. set과 pair를 합친 느낌이다. iterator 순회 시에도 vector나 set처럼 *iter가 아니라 iter->first / iter->second로 순회한다. 이때, first가 key, second가 value이다. 구조 자체는 set과 유사하다. 값 삽입, 정렬, 탐색시에 굉장히 짧은 시간이 걸린다는 장점이 있고, 여러 STL과 마찬가지로 잘 사용하면 상당히 편리하다.

map과 multimap의 차이점은 값의 중복 허용 여부이다. map의 경우 하나의 값만을 저장하는 용도이고, multimap의 경우 중복된 값을 허용하여 저장하게 된다.

map은 key 값을 기준으로 삽입시 자동 정렬을 지원해준다.


  • map / multimap 기본 함수
생성
map<char, int>  //key는 char, value는 int인 map을 생성
iterator 관련
begin()  //맨 처음 iterator를 return
end()  //맨 마지막 iterator를 return
추가 및 삭제
insert(make_pair(key,value))  //map에 원소를 pair 형태로 추가
erase(key)  //맵에서 key에 해당하는 원소 모두 삭제
erase(multimap.find(key))  //multismap에서 key에 해당하는 원소 하나만 삭제 (해당 iterator 값 하나만 삭제)
clear()  //map에 있는 모든 원소 삭제
탐색
find(key)  //key에 해당하는 iterator return
count(key)  //multimap에 들어있는 key에 해당하는 원소 개수 return, map의 경우 boolean type return
.etc
empty()  //비어있으면 true, 아니면 false return
size()  //map에 들어있는 원소의 수 return

  • 구현 코드
#include <iostream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

int main() {
    map<char, int> m;
    multimap<char, int> mm;

    m.insert(make_pair('a', 1));
    m.insert(make_pair('b', 2));
    m.insert(make_pair('b', 3));    //중복 허용 X
    m.insert(make_pair('d', 4));
    m.insert(make_pair('c', 5));
    m['e'] = 6; //가능

    mm.insert(make_pair('a', 1));
    mm.insert(make_pair('b', 2));
    mm.insert(make_pair('b', 3));   //중복 허용
    mm.insert(make_pair('d', 4));
    mm.insert(make_pair('c', 5));

    for (map<char,int>::iterator iter = m.begin(); iter != m.end(); iter++)
        cout << iter->first << "-" << iter->second << " ";

    cout << endl;

    for (multimap<char,int>::iterator iter = mm.begin(); iter != mm.end(); iter++)
        cout << iter->first << "-" << iter->second << " ";

    return 0;
}
728x90

'PL 문법 > C++' 카테고리의 다른 글

[C++] STL priority_queue 사용법  (0) 2024.02.14
[C++] STL set / multiset 사용법  (0) 2021.08.26
[C++] STL Vector 사용법  (0) 2021.07.13
[C++] C++ 표준 라이브러리  (0) 2021.07.13