출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/15


이번에는 map에 대해서 설명하겠습니다. 이것을 사용하려면 map이라는 헤더 파일을 포함해야 합니다. map은 조금 특수한 컨테이너에서 상당히 사용 빈도가 높은 컨테이너입니다. map은 있는 키 값과 함께 컨테이너에 넣고 그 키를 다시 삭제하거나 변경할 수 있는 컨테이너 입니다. 또한 요소를 추가 할 때, 키를 기반을 자동으로 정렬됩니다.

다음 코드를 봐주세요.


소스코드 보기


이걸 실행시키면 이렇게 됩니다.


우선, map의 선언 내용에 대해서 입니다만, 인수를 두 개 지정합니다. 첫째는 키, 둘째는 그 값입니다. 키는 나중에 컨테니어를 검색 할 때 사용될 것입니다. 위의 코드는 키에 int 형 값에 char*로 설정 지정합니다.

요소를 추가 할 때 insert 함수를 사용합니다. 그 인수의 지정에는 다음과 같은 세 가지가 있습니다.


  • map<키_형식, 그의_값_형식>::value_type(키,  값);
  • pair<키_형식, 그의_값_형식>(키,값);
  • make_pair(키, 값);
가장 간단한 make_pair를 사용하는 것이 손쉽고 빠릅니다. 이것들을 사용하여 요소를 추가합니다. 만약 키가 같은 값의 요소를 추가한 경우, 중복되는 값은 무시됩니다. 이 문제를 해결하려면 중복 키 등록이 가능한 multimap을 사용합시다. 이것을 사용하려면 multimap이라는 헤더 파일을 포함해야 합니다. 중복 키 등록이 가능할 뿐, 나머지는 map과 사용 방법이 동일합니다.

그럼, 각 요소에 액세스하는 방법입니다만, 기본적으로는 반복자를 사용합니다. 해당 반복자를 취득 하려면


키의 값은

(*반복자_이름).first

실제 값은

(*반복자_이름).second


혹은

키의 값은

반복자_이름->first

실제 값은

반복자_이름->second


이런 방식으로 취득해옵니다. 또 포인터처럼 사용할 수 있습니다. 당연히 값의 변경도 가능합니다. 인덱스에 대한 액세스는 기본적으로 불가능하지만, 기 값을 인덱스로 취급하는 경우에는 액세스 할 수 있습니다. 예를 들어

test[3];

이라고  쓰면, 컨테이너의 키가 3이 되어있는 요소의 값을 가져오게 됩니다. 이제 각 요소에 액세스하는 방법도 이해할 수 있겠지요? 기타 함수의 내용은 지금까지 공부한 컨테이너와 같습니다. 하지만 자주 사용하는 기능으로는 find 함수가 있겠습니다. 이 인수에는 키 값을 지정합니다. 만약 그 키가 있으면 짝이있는 요소의 값을 반환합니다. 없으면 그 컨테이너의 end() 반복자를 돌려줍니다. 마지막 두 줄은 검색 후 발견된 키 요소의 값을 실제로 볼 수 있습니다.

map 요소의 제거는 erase 함수를 사용합니다. 이 부분 함수는 vector 같은 것들과 동일합니다. 이 컨테이너는 저도 자주 쓰니 꼭 기억하세요.

다음은 set에 대해서 설명하겠습니다.

'공부 > C/C++' 카테고리의 다른 글

(C++) 클래스 내의 static 지정자  (0) 2014.08.07
(C++) 컨테이너【set】  (0) 2014.04.04
(C++) 컨테이너【queue】  (0) 2014.04.04
(C++) 컨테이너【stack】  (0) 2014.04.04
(C++) 컨테이너 【deque】  (0) 2014.04.03