2013-09-25 5 views
1

지도의 마지막 두 개를 제외한 모든 항목을 지우고 싶습니다. 내가 어떻게 할 수 있니? 다음과 같이?범위 내에서 C++ 맵 지우기

std::map<int, obj>::iterator firstit = mymap.begin(); 
std::map<int, obj>::iterator lastit = mymap.end(); 
lastit--; 
lastit--; 

mymap.erase (firstit ,lastit); 

답변

3

mymap의 요소 수가 2 개 미만인 경우 iterator이 유효하고 코드에서 정의되지 않은 동작을 호출하는지 테스트해야합니다.

auto it = mymap.begin(); 
auto size = mymap.size(); 

if (size > 2) 
{ 
    std::advance(it, size - 2); 
} 

mymap.erase(mymap.begin(), it); 
0

지도에 두 개 이상의 항목이 있다고 가정하면 나에게 잘 어울립니다.

--lastit;은 임시 반복기를 만들어야하기 때문에 lastit--;보다 효율적이라고 주장하는 경우가 있습니다.