Clolent

벡터에 이어서 맵에 대한 사용법을 찾아보고자 한다.

기본적으로 맵(Map) 은 자동적으로 정렬이 이루어져 있어야 유리한 무언가 + 값이 두개가 들어가는 경우


예를 들면 어떤 물건들을 관리하는데 그 물건의 번호와 가격을 저장하여 관리하고싶은데,  물건 번호를 정렬해서 유지하고싶다면 이런 경우가 맵을 사용하기 굉장히 적절한경우이다.


Map 은 두가지로 이루어져 있다. Key 와 Value 인데 Key 값으로 정렬이 된다. 중요한 점은 Key 값은 중복을 허용하지 않는다 ! 

만약 중복되는 Key 값을 사용하고 싶다면 Multimap 을 사용하여야 하지만 여기선 그냥 넘어가자. 왜냐하면 내가 잘 몰라


Map의 선언

Map 은 두가지 값을 선언해야하므로 그 선언되는 타입도 두가지이다.


map< KeyType, ValueType > 변수이름 ;    이렇게 선언하는데 이제 첫번째 데이터 타입이 Key 두번째가 Value 를 따르게 된다.

Key값을 기준으로 정렬이되니 신중하게 하여야 한다.


Map 의 사용 ( 입력 )

Map 은 한번에 두개의 값을 입력해야한다. 그래서 사용하는 방법이 두가지 있다.


1.    insert

map.insert( pair <KeyType, ValutType >( KeyValue, Value ) ) ;

insert 를 통해서 값의 쌍을 넘겨주어야 하는데 따로 struct 를 만들필요 없이 pair 을 통해 값의 쌍을 묶어서 만든다음에 map 에 넘기는 방식


2.    map[Key] = Value   ;

굉장히 간편하다고도 볼수 있는 방법으로 

map [ KeyValue ] = Value 로 선언하면 자동으로 인자가 추가가 된다. 


Map의 사용 ( 탐색 )

Map 의 장점은 여러가지가 있지만 대표적인 장점으로는 Key 값으로 자동 정렬이 된다는 점과, 이 Key 를 통해 인자에 접근이 가능하다는 것이다. 


1. Iterator 사용

앞서 벡터와 마찬가지로 map 또한 iterator 을 통해 접근이 가능하다. 다른점이라면 값이 두개이기때문에 " Iterator -> " 를 통해서 둘중 어떤 값을 사용할것인지 명시해줘야 한다는 것이다. begin 과 end 는 벡터와 동일하게 사용 가능하므로 앞선 글을 한번더 보면 좀더 도움이 될것이다.

for( auto a = map.begin() ; a != map.end() ; a++ ) 이게 가능하다는 뜻 

구글링이 사실 제일 좋다


2. 인덱스를 통한 접근

Key 값이 뭐가 들어있는지 알고있다면 이를 인덱스처럼 사용하여 접근이 가능하다, 인덱스가 굳이 숫자가 아니어도 가능하다 ! 이는 굉장한 메리트이다.

예시로 과거 문제해결기법 이라는 것에서 다른 친구들이 배열 2,3개를 이요해서 알파벳과 랜덤 숫자를 매칭시켜주고있는데 난 그저 map 으로 선언을 하고, 알파벳 자체를, 인덱스로 해서 접근이가능했다. 근데 수행시간은 내가더 걸렷다 헿

만약 3 이라는 Key 를 가지고 있는 인자가 있는 것을 알고 있다면 Map[3] 이라고 하면 그 Value 값을 볼수 있게 된다.



Map의 사용 ( 제거와 업데이트 )


1. 업데이트

만약 이미 Key값이 존재하는 어떤 인자의 값을 바꾸고 싶다면 간단하다! insert 할때처럼

map [ Key ] = UpdateValue 하면 그냥 덮어 쓴다! 끝 ! 


2. 제거

제거또한 Key 값을 이용하여 쉽게 접근할수 있다. map . erase ( Key ) 자 삭제가 완료되었다 쉽다.



Map의 사용 ( 예제 )


#include <map>

#include <iostream>


using namespace std;


int main(){

map< char, int > mm ;

map< char, int >::iterator mm_iter ;

mm['C'] = 70 ;

mm['A'] = 100 ;

mm['B'] = 50 ; 

for( mm_iter = mm.begin() ; mm_iter != mm.end() ; mm_iter++ ){

cout << mm_iter->first << " " << mm_iter->second << endl;

}

return 0;

}

결과값

A 100

B 50

C 70


-> 자동으로 정렬이 되어서 저장되어 있는 것을 알수 있다. Iterator 을 -> 사용해서 저장된 값에 접근한다.


여기서 mm['B'] = 600 ; 

을 추가하고 다시 출력하면 B 는 600 과 짝지어서 출력되는걸 볼수 있다.


'Programing > C++ Algorithm' 카테고리의 다른 글

힙 Heap 이란  (0) 2016.07.06
이진 탐색 ( Binary Search )  (0) 2016.07.03
Vector 사용법 / STL  (0) 2016.06.28
탑 / 백준 2493 / 스택  (1) 2016.06.22
큐 구현 / 백준 10845 / Queue  (1) 2016.06.22
댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글