지도의 마지막 두 개를 제외한 모든 항목을 지우고 싶습니다. 내가 어떻게 할 수 있니? 다음과 같이?범위 내에서 C++ 맵 지우기
std::map<int, obj>::iterator firstit = mymap.begin();
std::map<int, obj>::iterator lastit = mymap.end();
lastit--;
lastit--;
mymap.erase (firstit ,lastit);
지도의 마지막 두 개를 제외한 모든 항목을 지우고 싶습니다. 내가 어떻게 할 수 있니? 다음과 같이?범위 내에서 C++ 맵 지우기
std::map<int, obj>::iterator firstit = mymap.begin();
std::map<int, obj>::iterator lastit = mymap.end();
lastit--;
lastit--;
mymap.erase (firstit ,lastit);
mymap
의 요소 수가 2 개 미만인 경우 iterator
이 유효하고 코드에서 정의되지 않은 동작을 호출하는지 테스트해야합니다.
auto it = mymap.begin();
auto size = mymap.size();
if (size > 2)
{
std::advance(it, size - 2);
}
mymap.erase(mymap.begin(), it);
지도에 두 개 이상의 항목이 있다고 가정하면 나에게 잘 어울립니다.
--lastit;
은 임시 반복기를 만들어야하기 때문에 lastit--;
보다 효율적이라고 주장하는 경우가 있습니다.