[C++] STL pair, map

1. STL pair

두 값을 한 쌍으로 묶는 방법

#include <utility>
pair<int, int> p;

p  = make_pair(a, b) : a와 b를 묶어서 한 쌍으로 만드는 것이며 아래의 map에서 종종 쓰인다.
p.first : pair의 첫번째 원소(a)를 반환
p.second : pair의 두번째 원소(b)를 반환



2. STL map

key와 value가 한 쌍으로 이루어진 균형이진트리 (Red-Black Tree)

1. 많은 양의 데이터 처리에 좋음
2. 검색 속도가 빠름
3. 한쌍의 key, value를 저장하여 특정 부분에서 효율성이 좋음
4. 자동으로 정렬됨


단점

1. 데이터의 양이 적으면 오버헤드 발생으로 자원 낭비



#include <map>
map<int, string> m;


m.size() : map 크기 반환
m.empty() : map이 비었는지 아닌지 확인

m.begin() : 맨 앞의 iterator 반환
m.end() : 맨 뒤의 iterator 반환
//m.end()는 마지막 원소가 아니라 맨 끝. m.end()의 전이 마지막 원소가 됨.

m.rbegin() : (역방향) 맨 앞의 itertator 반환
m.rend() : (역방향) 맨 뒤의 iterator 반환

m.insert(make_pair(key, value)) : key와 value를 한 쌍으로 값을 넣어줌
m.find(key) : key를 가지고 있는지 찾기

m.lower_bound(key) : 지정한 key의 요소를 가지고 있다면 해당 위치 iterator 반환
m.upper_bound(key) : 지정한 key의 요소를 가지고 있다면 해당 위치 다음 iterator 반환

m.clear() : key 모두 삭제
m.erase(key) : key에 해당하는 원소 삭제
m.erase(key1, key2) : key1 ~ key2 사이의 원소 모두 삭제



1) 맵 탐색

map::iterator iter;

 for(iter = m.begin(); iter != m.end(); iter++){

//do what you want

}

2) 맵 응용

map<int, vector<int, string> > m;
map<int, vector<int, list<int> > > m;

//map에 vector나 list를 넣어서 여러개의 값을 가지게 만들 수 있음. 
//단 "> >"와 같이 꺽쇠를 띄어쓰기 해줘야 함. 

댓글