본문 바로가기

Language/C++ 그때그때 끄적끄적

[C++]map 사용법

알고리즘 문제를 풀다보면 map사용이 많아지고 있습니다 때문에 한번 정리를 하고 가는게 좋을거라 생각되었습니다

 

 

map이란

map은 key와value가 한쌍을 이룬 이진트리입니다 pair로 구성되어있기때문에 first가 key, second가 value에 해당됩니다

또한 map은 Key값의 중복을 허용하지않습니다

map의 내부구현은 삽입,검색,삭제가 불가능한 레드블랙트리로 구성되어있습니다

시간복잡도는 이진트리이기때문에 O(logN)입니다

 

사용법

map<key, value> mymap;

기본적인 선언입니다 key 값고 value 값으로 pair를 만들어 사용합니다

 

 

데이터 삽입

mymap.insert({"dongsu", 11});

이때 key값이 없다면 오류가 발생하고 중복된다면 해당코드는 수행되지않습니다

map은 중복을 허용하지않습니다

 

데이터 삭제

key 기반 삭제

mymap.erase("Dongsu");

key값에 해당하는 노드 삭제

 

범위기반 삭제

 

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

범위기반삭제또한 가능합니다

 

반복자기반 삭제

mymap.erase(itr);

접근자가 존재할때 접근자 기반으로 삭제도 가능합니다 이또한 범위 기반 삭제가 가능합니다

 

map 순회

정석적인 map의 순회는 접근자를 사용합니다

for(auto itr = mymap.begin(); itr != mymap.end(); itr++) 
{
  	cout << itr->first << " " << itr->second << '\n';
}

저는 이방식을 잘 사용하지않습니다 조금 복잡하기때문에... 주로 저는 범위기반for문을 사용하여 순회를 하곤합니다

아래 코드가 그 예시입니다

for (auto& m : mymap)
{
	cout << m.first << " " << m.second << '\n';
}

 

 

데이터 찾기

map의 꽃이라고 할수있는 부분입니다 key값을 가진 데이터를 찾고 없다면 삽입하고 있다면 추가적인 행동을 할 수 있습니다

데이터를 찾을 때는 반복자를 사용하며, 끝까지 값을 찾지못했을경우 반복자는 mymap.end()를 반환하게 됩니다

if (mymap.find("Dongsu") != mymap.end()) 
{
	//	데이터 있음
}
else 
{
	//	데이터 없음
}

 

기타

mymap.clear();		// map 비우기
mymap.size();		// map 크기 반환

 

'Language > C++ 그때그때 끄적끄적' 카테고리의 다른 글

[C++]Constexpr  (0) 2024.02.19
[C++] range based for(범위 기반 for문)  (0) 2023.05.16
[C++] 문자열 나누기 spring split  (0) 2023.05.15
[C++] Iterator 반복자  (0) 2023.05.10
[C++]람다식이란  (0) 2022.05.11