C++ c++;范围内的地图擦除

C++ c++;范围内的地图擦除,c++,map,erase,C++,Map,Erase,我想删除地图中除最后两个之外的所有条目。我怎么能这么做?像下面这样 std::map<int, obj>::iterator firstit = mymap.begin(); std::map<int, obj>::iterator lastit = mymap.end(); lastit--; lastit--; mymap.erase (firstit ,lastit); std::map::iterator firstit=mymap.begin(); std:

我想删除地图中除最后两个之外的所有条目。我怎么能这么做?像下面这样

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

mymap.erase (firstit ,lastit);
std::map::iterator firstit=mymap.begin();
std::map::iterator lastit=mymap.end();
拉斯蒂特;
拉斯蒂特;
mymap.erase(firstit,lastit);

假设您的地图中至少有两个条目,我觉得很好


——lastit
有时被认为比
lastit--因为后者必须创建一个临时迭代器。

您需要测试
迭代器是否有效,如果
mymap
的元素少于2个,则代码调用未定义的行为

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

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

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