1

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

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

mymap.erase (firstit ,lastit);
4

2 回答 2

3

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

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

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

mymap.erase(mymap.begin(), it);
于 2013-09-25T10:00:06.160 回答
0

假设您的地图中至少有两个条目,我看起来很好。

--lastit;有时声称比后者更有效,lastit--;因为后者必须创建一个临时迭代器。

于 2013-09-25T09:50:02.613 回答