C++ 映射擦除范围

c++ map erase in range

本文关键字:范围 擦除 映射 C++      更新时间:2023-10-16

我想删除地图中除最后两个条目之外的所有条目。我该怎么做?喜欢以下内容?

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

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

auto it = mymap.begin();
auto size = mymap.size();
if (size > 2)
{
    std::advance(it, size - 2);
}
mymap.erase(mymap.begin(), it);

假设您的地图中至少有两个条目,对我来说看起来不错。

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