c++ map删除erase()的一个小问题

img


#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
class PrintElement//伪函数 
{
public:
    void operator()(const pair<int, int>& element)
    {
        cout << element.first << ", " << element.second << endl;
    }
};
int main()
{
    map<int,int>m;
    m.insert(make_pair(1,10));
    m.insert(make_pair(2,20));
    m.insert(make_pair(3,30));    

    
    m.erase(m.begin(),++m.begin());//我想删除第一和第二个元素,为啥只删了第一个 
    for_each(m.begin(),m.end(),PrintElement() );
}

你是++ 所以只删除一个

改成这样就可以

m.erase(m.begin(), m.begin() + 2); // 从开头开始删除前两个元素

  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++ STL中map.erase(it++)用法原理解析
  • 除此之外, 这篇博客: C++ map的使用中的 1.erase 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • map<int, int>::iterator it = m.begin();
    m.erase(it);//可以传迭代器
    m.erase(2);//也可以直接传key值
    

    但是传的迭代器必须保证是有效迭代器,而传key值随意传。(即使这个key值不存在)