관리 메뉴

Storage Gonie

(24) C++ map헤더의 map 사용법 본문

알고리즘/문제해결을 위한 C++ 공부

(24) C++ map헤더의 map 사용법

Storage Gonie 2019. 5. 19. 17:22
반응형

용도 : pair가 그냥 두 자료형을 묶는 거라면, map은 왼쪽의 값을 key값으로 사용하고, 오른쪽의 값은 value값으로 사용한다.
           key와 value를 가지는 노드를 생성해서 정렬된 '트리형태'로 저장해두어 탐색속도를 높인다.(key를 기준으로 정렬됨)

           python의 딕셔너리와 비슷하나 딕셔너리는 해시테이블로 구성되고, map은 트리로 구성된다.(레드 블랙 트리가 사용됨)

           index를 이용해 자료에 접근하는 배열과 달리 key값을 이용해 value에 접근할 수 있다.(key는 unique해야함)
           중복된 key를 사용하여 입력하면 덮어씌어짐.

           추가, 삽입, 삭제 시 자동정렬된다는 것도 알아두자.

           아래 사용할 수 있는 함수를 보면 알겠지만 pair로 map을 구현했다는 것을 알 수 있다.

 

1. 헤더파일

#include<map>

2. 변수 선언

map<char, int> m;            // 왼쪽은 key값의 type, 오른쪽은 value값의 type

3. key, vlaue 쌍을 추가하는 두 가지 방법

m['A'] = 1 ;
m['B'] = 3 ;
m.insert(make_pair('C', 2));
m.insert(pair<char, int>('D', 4));

4. 모든 데이터 출력

for (map<char, int>::iterator it = m.begin(); it != m.end(); it++) // auto 형으로도 사용 가능
    cout << it->first << ' ' << it->second << '\n';
    
    
for (auto p : m)
    cout << p.first << ' ' << p.second << '\n';

5. erase 함수

- key를 이용해서 한 개의 노드 삭제

m.erase('A');

 

6. clear 함수

- 맵의 모든 원소들 삭제

m.clear();

 

7. find 함수
- key를 이용해서 한 개의 value 읽기
- find 함수는 iterator를 반환하는데 키 값이 존재하지 않을 시 end()를 반환함

cout << m.find('A')->second;

map<char, int>::iterator it = m.find('A');
cout << it->second;

if (m.find('A') == m.end())
    cout << "key 'A' doesn't exist" << "\n";
else
    cout << "key 'A' exist" << "\n";

8. empty()

cout << m.empty(); // 맵이 비어있으면 true, 아니면 false를 반환

9. size()

cout << m.size(); // 맵 원소들의 수를 반환

10. count()

- key가 존재하면 1 아니면 0을 반환하게됨.

cout << m.count('A'); 
반응형
Comments