c++ 자료구조중에 Map 사용법을 정리해보자
개념
map은 각 노드가 key와 velue쌍으로 이루어진 트리입니다. 특히 중복을 허용하지 않고, key값의 순서대로 정렬이 되는 방식을 가지고 있습니다. map container는 key값에 한에서 중복을 허용하지 않고, value값에서는 중복을 허용합니다. map은 <key, value>의 형식으로 이루어져있습니다. set과 마찬가지로 오름차순으로 정렬되고, 동적할당됩니다. 형태는 노드 기반의 레드-블랙 이진트리로 이루어져있습니다.
선언
먼저 헤더에 #include<map>>을 해주어야한다. map container는 map<key, value>변수이름;의 형식으로 생성한다.
원소 추가하기
- insert(a, b) map에 원소를 추가하기 위한 맴버함수입니다. 중복된 key의 값은 추가할 수 없고 에러를 리턴함에 주의해야 합니다.
- operator[] 활용 operator를 사용하면 원소를 추가하거나, 존재하는 key의 값을 업데이트 할 수 있습니다.
찾기
find()를 활용하면 key값에 해당하는 value를 찾을 수 있습니다. 그러나 만약 value에 해당하는 key를 찾기 위해서는 반복문을 활용하여 찾아야 합니다.
삭제
삭제하는 방법은 3가지입니다.
- 특정 위치의 요소 삭제 m.erase(m.begin()+1);와 같이 해당 iter에 해당하는 요소를 삭제할 수 있습니다.
- key값을 기준으로 요소 삭제 m.erase(“a”);와 같이 해당 key값에 해당하는 요소를 삭제할 수 있습니다.
- 모든요소 삭제 m.clear()를 활용하면 map에 있는 모든 요소를 삭제할 수 있습니다.
활용예시
#include<map>
using namespace std;
int main(void){
map<int, int>node;
node.insert({1, 1}); //key = 1, value = 1인 원소 추가
node[1] = 4; //key = 1인 원소의 value를 4로 변경
node[2] = 3;
if(node.find(1) != node.end())
cout << "Find!\n"; // key = 1인 원소를 찾을때
else
cout << "undifiend...\n"; //key = 1인 원소를 못찾았을 때
for(int i = 0; i < node.size(); i++){
if(node[i] == 4)
cout << node.first() << endl;
} //value == 4인 key값을 찾는 반복문
node.erase(node.begin()); //node.begin()의 위치에 있는 요소 삭제
node.erase(1); // key == 1인 요소 삭제
node.clear(); //map 요소 모두 삭제
}
멤버함수 정리
-
begin()
첫번째 원소의 랜덤 접근 반복자를 반환
-
end()
마지막 원소 다음의 반복자를 반환
-
empty()
map이 비어있으면 true, 아니라면 false 반환
-
clear()
저장하고 있는 모든 원소 삭제
-
eraser(iter), eraser(start, end)
특정 위치의 원소나 지정 범위의 원소를 삭제
-
find(a)
key와 관련된 반복자 반환(a == key) 없다면 end()와 같은 반복자 반환
-
insert(a, b), insert(iter, a)
위에서 설명한 대로 key == a, value == b인 원소 추가, iter의 위치에 value == b인 원소 추가
-
upper_bound(a)
a == key인 요소가 있을 경우 해당 위치의 반복자를 반환
-
lower_bound(a)
a == key인 요소가 있을 경우 해당 위치의 반복자를 반환
-
rbegin()
역방향으로 첫번째 원소의 반복자 반환
-
rend()
역방향으로 마지막 원소 다음의 반복자 반환
-
size()
원소의 개수를 반환
-
operator[]
지정한 key값으로 추가 및 접근
참고자료
https://ssocoit.tistory.com/25 https://life-with-coding.tistory.com/305
댓글남기기