c++ 자료구조중에 Map 사용법을 정리해보자

개념

map은 각 노드가 key와 velue쌍으로 이루어진 트리입니다. 특히 중복을 허용하지 않고, key값의 순서대로 정렬이 되는 방식을 가지고 있습니다. map container는 key값에 한에서 중복을 허용하지 않고, value값에서는 중복을 허용합니다. map은 <key, value>의 형식으로 이루어져있습니다. set과 마찬가지로 오름차순으로 정렬되고, 동적할당됩니다. 형태는 노드 기반의 레드-블랙 이진트리로 이루어져있습니다.

선언

먼저 헤더에 #include<map>>을 해주어야한다. map container는 map<key, value>변수이름;의 형식으로 생성한다.

원소 추가하기

  1. insert(a, b) map에 원소를 추가하기 위한 맴버함수입니다. 중복된 key의 값은 추가할 수 없고 에러를 리턴함에 주의해야 합니다.
  2. operator[] 활용 operator를 사용하면 원소를 추가하거나, 존재하는 key의 값을 업데이트 할 수 있습니다.

찾기

find()를 활용하면 key값에 해당하는 value를 찾을 수 있습니다. 그러나 만약 value에 해당하는 key를 찾기 위해서는 반복문을 활용하여 찾아야 합니다.

삭제

삭제하는 방법은 3가지입니다.

  1. 특정 위치의 요소 삭제 m.erase(m.begin()+1);와 같이 해당 iter에 해당하는 요소를 삭제할 수 있습니다.
  2. key값을 기준으로 요소 삭제 m.erase(“a”);와 같이 해당 key값에 해당하는 요소를 삭제할 수 있습니다.
  3. 모든요소 삭제 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 요소 모두 삭제
 }

멤버함수 정리

  1. begin()

    첫번째 원소의 랜덤 접근 반복자를 반환

  2. end()

    마지막 원소 다음의 반복자를 반환

  3. empty()

    map이 비어있으면 true, 아니라면 false 반환

  4. clear()

    저장하고 있는 모든 원소 삭제

  5. eraser(iter), eraser(start, end)

    특정 위치의 원소나 지정 범위의 원소를 삭제

  6. find(a)

    key와 관련된 반복자 반환(a == key) 없다면 end()와 같은 반복자 반환

  7. insert(a, b), insert(iter, a)

    위에서 설명한 대로 key == a, value == b인 원소 추가, iter의 위치에 value == b인 원소 추가

  8. upper_bound(a)

    a == key인 요소가 있을 경우 해당 위치의 반복자를 반환

  9. lower_bound(a)

    a == key인 요소가 있을 경우 해당 위치의 반복자를 반환

  10. rbegin()

    역방향으로 첫번째 원소의 반복자 반환

  11. rend()

    역방향으로 마지막 원소 다음의 반복자 반환

  12. size()

    원소의 개수를 반환

  13. operator[]

    지정한 key값으로 추가 및 접근

참고자료

https://ssocoit.tistory.com/25 https://life-with-coding.tistory.com/305

댓글남기기