본문 바로가기
Programming/C C++

C++ STL map 컨테이너

by whitele 2021. 6. 9.
반응형

map

 map 컨테이너는 key와 value를 쌍으로 갖는 연관 컨테이너이다. 연관 컨테이너 중 활용도가 높아 많이 쓰인다. 파이썬의 딕셔너리와 유사하다. key는 중복이 될 수 없으며 value는 가능하다. key 중복을 허용하려면 multimap 컨테이너를 사용해야 한다. map의 원소는 pair 객체로 저장된다.

생성자

  • map<T> m: 빈 m 생성
  • map<T,p<T>> m : p<T> 조건자로 정렬한 빈 m생성

멤버 함수

  • size() : 컨테이너의 원소 개수
  • count(x) : 원소 x의 개수 반환
  • begin() : 처음을 가리키는 반복자 반환
  • rbegin() : 처음을 가리키는 역순차열의 반복자 반환
  • end() : 마지막을 가리키는 반복자 반환
  • rend() : 마지막을 가리키는 역순차열의 반복자 반환
  • clear() : 모은 요소 제거
  • empty() : 컨테이너가 비었는지 검사
  • equal_range(x) : x의 pair 객체 반환 (first에 lower_bound, second에 upper_bound 반환)
  • erase(i) : i가 가리키는 원소 삭제 후 다음 원소를 가리키는 반복자 반환
  • find(x) : x의 위치 반환
  • insert(x) : x삽입 후 삽입 원소를 가리키는 반복자와 bool값을 가진  pair 객체 반환
  • insert(i,x) : i위치부터 x를 삽입 후 x를 가리키는 반복자 반환
  • insert(i, i2) : [i, i2)의 원소를 삽입
  • key_comp() : key 정렬 기준 조건자 반환
  • value_comp() : value 정렬 기준 조건자 반환
  • lower_bound(x) : x의 시작 구간을 가리키는 반복자 반환
  • upper_bound(x) : x의 마지막 구간을 가리키는 반복자 반환
  • max_size() : 해당 컨테이너가 담을 수 있는 최대 원소 개수
  • swap(m) : m과 스왑

 map의 요소는 pair 객체로 되어있으므로 변경 및 추가 시에는 pair 객체 형식에 맞게 하여야 한다. map은 정렬 기준으로 less이고 모든 key는 중복을 허용하지 않는다.

#include <iostream>
#include <map>
using namespace std;
int main(){
	map<int,int> ma;
	for(int i=0;i<10;i++)
		ma.insert(pair<int,int>(i,99));
	
	map<int,int>::iterator iter;
	
	for(iter=ma.begin();iter!=ma.end();iter++)
		cout<<(*iter).first<<','<<(*iter).second<<endl;
	
	return 0;
}

실행 예

코드를 보면 pair 객체 생성 후 insert를 진행한다. 또한 value가 중복 가능하다는 것을 볼 수 있다. insert의 반환형으로는 삽입 성공 시 삽입된 요소를 가리키는 반복자와 삽입 성공했다는 bool 값이 저장된 pair 객체를 반환한다.

[] 연산자

map은 인덱스 연산자를 이용하여 원소에 접근이 가능하다. 접근한 원소를 추가 변경 가능하다.

#include <iostream>
#include <map>
using namespace std;
int main(){
	map<int,int> m;
	m[1]=20;
	m[2]=40;
	m[4]=1;
	m[3]=8;
	
	map<int,int>::iterator iter=m.begin();
	
	for(iter;iter!=m.end();iter++)
		cout<<(*iter).first<<','<<(*iter).second<<endl;
	
	return 0;
}

실행예2

 key로 되어있는 값이 [ ] 안에 있는 값 그리고 대입된 값이 value로 저장된다.

map 정리

map은 연관 컨테이너 중에서도 활용성이 좋아 가장 많이 쓰인다. 노드 기반 컨테이너로 트리 구조로 저장된다. 때문에 검색 관련 함수에서 유리한 성능을 보인다. less 기준으로 자동 정렬되며 연관 컨테이너와 같은 인터페이스를 제공한다. 중복된 key가 가능한 컨테이너를 사용하려면 multimap을 사용해야 한다.

728x90
반응형

댓글