C++

[C++ STL] Map

map을 공부해보자.

Posted by kyoungIn on March 14, 2019

Map

맵(Map)은 set, multiset, multimap등과 같이 STL이 제공하는 자료형 중 하나이다.

원소를 key 와 value의 쌍으로 저장한다.

set은 원소로 key 하나만을 저장하지만, map 은 원소로 key와 value의 쌍(pair 객체)를 저장한다.

또한 삽입과 동시에 정렬이 된다. 그리고 저장공간의 필요에 따라서 allocator 객체를 사용하므로 동적할당한다.


먼저 <map> 라이브러리를 선언한 후에 map<key type,value type> 으로 map 컨데이너 객체를 생성 하면 된다.

접근 방식

  1. iterator를 사용한 접근.

    map<key type,value type> ::iterator iter_name ; 선언 후

    iter_name ->first , iter_name ->second 같은 형식으로 접근 가능하다.

  2. 인덱스 요소를 이용한 접근.

이 있다

요소 추가

  1. map_name.insert(make_pair(key_name,value_name));
  2. map_name[key_name] = value_name;

데이터 중복확인

1.find(data)

= data: 찾고 싶은 키

return 값:

  • key를 찾은 경우: element의 iterator
  • key를 못 찾은 경우 : map::end
1
2
3
4
5
if ( m.find("f") == m.end() ) {	
  // not found
} else {
  // found
}
  1. count(data)

원래 count()는 원소가 몇 개인지 세는 함수이지만 std::map container의 원소들은 하나하나가 다 고유(unique)한 값이기 때문에 key가 존재하면 1을, 존재하지 않으면 0을 return 한다.

데이터 확인 예제

	map<int,string> m;  //key(index),value(data)
    
    int i,n;
    cin >> n;
    
    for(i=1;i<=n;i++){
        string temp;
        cin >> temp;
        m.insert(make_pair(i,temp));
    }
   
    map<int,string>::iterator iter; //반복자 (접근위해 필요)
    
    for(iter=m.begin();iter != m.end();iter++){
        cout << iter->first << "::" << iter->second << "\n";
    }