C++ 映射擦除范围
c++ map erase in range
我想删除地图中除最后两个条目之外的所有条目。我该怎么做?喜欢以下内容?
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--;
更有效,因为后者必须创建一个临时迭代器。
相关文章:
- 引用一个已擦除类型(void*)的指针
- 擦除while循环中迭代的元素
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 列出超出范围的擦除迭代器
- 矢量擦除范围内的元素
- 如何擦除矢量中的所有元素,但特定范围内最大的元素除外
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- 擦除范围从std :: vector删除向量的最佳方法
- 使用迭代器的矢量擦除特定索引(不基于范围或条件)
- 我们可以擦除c++11中基于循环的范围内的项目吗
- 范围外的矢量擦除迭代器
- 范围之外的矢量擦除迭代器
- 标准::矢量::擦除无效范围
- 从头到尾列出擦除范围
- C++ 映射擦除范围
- 使用矢量::擦除整个范围
- 用作 std::multimap 擦除范围的第一个和最后一个的递增迭代器
- 迭代器范围矢量构造或矢量擦除更快
- 安全地从地图内擦除基于的范围
- Iterator范围擦除元素