티스토리 뷰

PS/PS 일반

Map 사용법

푸르른강물을먹이를찾아어슬렁거리는연어처럼 2020. 10. 3. 23:38

begin(), end() method

// map::begin/end
#include <iostream>
#include <map>

int main ()
{
  std::map<char,int> mymap;

  mymap['b'] = 100;
  mymap['a'] = 200;
  mymap['c'] = 300;

  // show content:
  for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';

    std::cout<<mymap.end()->first<< " => " << mymap.end()->second<< '\n';
  return 0;
}
  • 위와 같이 접근시에는 iterator를 이용해 접근함.
  • 주의할 점은, iterator의 시작과 끝은 begin() 과 end() 메소드를 통해 그 값을 가져올 수 있는데, begin의 경우 map의 가장 첫번째 아이템을 가져오는 것과 달리, end() method의 경우에는 원소의 값이 없으므로, 접근해서 사용하면 원하는 값이 나오지 않을 것이다.
  • 다만, 해당 메소드는 lower_bound(x_key)와 같은 메소드를 이용할 때, 만약 iterator가 해당 값과 동일하다면 containor에 있는 값들은 모조리 현재 x_key값보다 key 값이 더 작다는 것을 알 수 있게 해준다.
//출처 : 종만북 707p
map<int, int> coords;

bool isDominated(int x, int y){    
    map<int, int>:: iterator it = coords.lower_bound(x);
    if(it==coords.end())return false;
    return it->second > y;
}
  • 위와 같이 iterator 값을 lower_bound(x) 메소드를 이용해 비교 하는 경우, end() 메소드는 좋은 코너 케이스가 될 수 있을 것이다.

upper_bound(), lower_bound() 메소드

  • upper_bound()와 lower_bound()는 이름에서 유추가 힘들다. 둘 다 기준 값보다 작지 않은 값 중 경계값을 찾는데 의의가 있다.
  • 다만, upper_bound()는 기준 값과 같은 값을 포함하지 않고, lower_bound() 는 기준값과 같은 값을 포함한다.
map<int, int> A;
A[1]=1;
A[2]=2;
A[3]=3;

map<int, int>::iterator upit = A.upper_bound(2);
map<int, int>::iterator loit = A.lower_bound(2);
  • 결과값은, upit는 3을 가리키는(upit->first == 3, upit->second == 3) iterator가 되고, loit의 경우 동일한 index 를 사용했지만, 2를 가리키는(loit->first==2, loit->second == 2) iterator가 된다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함