programming/C++

[C++] STL MAP 정리

KoTiv 2022. 3. 29. 11:42
반응형
SMALL

MAP이란 ?

MAP은 노드가 KEY: VALUE 쌍으로 이루어진 트리형식의 구조이며 중복을 허용하지 않는다. 

MPA은 First, Second가 있는 Pair객체로 저장되며 First-key , Second-value로 저장되는 형식을 가지고있다.

C++의 STL MAP의 기능은 시간복잡도 O(log N)인 레드블랙트리로 구성되어 있다.

map의 기본함수 

기본형 map<key, value> key와 value의 pair형으로 선언
iterator (반복자) begin(), end() begin, end iterator를 반환
추가 insert( make_pair(key,value) ) 맵의 원소에 pair형으로 데이터 추가
삭제 erase(key) 맵에서 key에 해당하는 원소 삭제
  claer() 맵의 원소 모두삭제
조회 find(key) key값에 해당하는 iterator를 반환
  count(key) key값에 해당하는 value의 갯수 반환
기타 empty() 맵이 비어있으면 true, 아니면 false
  size() 맵의 원소의 수 반환

Map의 헤더파일 

#include<map>;

 

Map의 기본 형

map<key, value> m;

map은 자료를 저장할때 내부에서 자동으로 정렬하게 된다. 여기서 map은 key를 기준으로 정렬하게 되며 오름차순으로 정렬하게 된다.

만약 내림차순으로 정렬하고자 한다면

map<int, int,greater> m;  선언 이후  데이터에 마이너스를 붙여 삽입하면 내림차순 정렬이 된다.

 

map 선언하기 

map<key type, value type>이 기본 구조이며  선언시

map<string, int> m;

 

map search 하기 ( 데이터 확인 ) 

iterator를 사용하여 map의 데이터를 확인하게 된다.

데이터를 끝까지 찾지 못했을 경우, iterator는 map.end()를 반환한다.

#include <iostream>
#include <map>
#include <string>

map<string, int> m;

if(m.find("Alice") != m.end())
{
	cout<<"find"<<endl;
}
else 
	cout<<"not find"<<endl;

 

map에 데이터 삽입

-위에서도 말했지만 map은 데이터의 중복을 허용하지 않는다. 그렇기 떄문에 insert를 진행할때 key가 중복이 된다면 insert가 수행되지 않는다.

m.insert({"cam", 300});


반복문 데이터 접근 ( first, second) 

인덱스 기반 반복문 

( 인덱스 기반은 iterator를 활용하여 begin() 부터 end()까지 조회하는것 )

for( auto iter = m.begin(); iter!= m.end(); iter++)
{
	cout<< iter->first <<" "<< iter->second <<endl;
}
cout<< endl;

범위 기반 반복문 활용 

for(auto iter:m)
{
	cout<<iter.first<<""<iter.second<<endl;
}

 

map에서 데이터 삭제 

map에서 데이터 삭제하기 위해 활용하는 함수는 erase와 clear이다 

특정위치의 요소 삭제

m.erase(m.begin()+2);

key값을 기준으로 요소 삭제

m.erase("alice");

map의 모든 데이터 삭제

erase 함수로 모든 요소 삭제 (map의 begin()부터 end()까지 )

m.erase(m.begin(), m.end());

clear 함수로 모든 요소 삭제

m.clear();

 

반응형
LIST