그러면 맨 마지막 값을 가져오기 위해서는 맨 마지막 iterator를 가져오기만 하면 되는데...
map 의 member 함수 중 end() 함수가 있는데 이는 맨 마지막 iterator를 가리키기 않는다. end() 함수는 맨마지막 원소를 넘어선 map의 가장 마지막을 가르킨다. 그래서 end() 함수를 활용하여 맨 마지막 원소에 접근하려면 증감연산자(--)를 이용해 한단계 앞으로 iterator를 옮겨 주면 된다. 그리고 map 에는 rbegin() 이라는 함수도 제공하는데 이는 현재 map에 있는 원소를 거꾸로 하였을때 맨 처음 원소를 가리킨다.
map< int, Data* > mpData;
// end() 의한 마지만 원소 접근
map< int, Data* >::iterator it = --mpData.end();
Data* pData = it->second;
// rbegin() 에 의한 마지막 원소 접근
map< int, Data* >::reverse_iterator it = mpData.rbegin();
Data* pData = it->second;
위의 코드중 end() 함수에 의한 접근은 위험 요소를 갖고 있다. map에 저장된 데이터가 하나도 없을 경우 에러를 발생한다. end()에 의한 접근 전에 map의 크기를 검사 하는 루틴을 포함해 주어야한다.
Original Post : http://neodreamer-dev.tistory.com/257
No comments :
Post a Comment