map erase删除学习

发布时间 2023-03-23 09:23:00作者: lypbendlf

转自:https://blog.csdn.net/hjxu2016/article/details/115137332

1.erase

C++11中,erase删除迭代器,返回的是下一个元素的迭代器:

iterator  erase (const_iterator position);//删除一个
size_type erase (const key_type& k);//按照key删除
iterator  erase (const_iterator first, const_iterator last);//删除一段

对于关联容器(如map, set, multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前iterator即可。因为map之类的容器,使用了红黑树来实现,插入、删除一个结点不会对其他结点造成影响。

2.删除操作  

#include <iostream>
#include <map>

using namespace std;
int main() {
    map<int, string> m{{1, "one"}, {2, "two"},{3, "three"}, {4, "four"}, {5, "five"}};
    for(auto iter = m.begin(); iter != m.end();)
    {
        if (iter->first == 4)
        {
            iter = m.erase(iter);//赋值为返回的有效迭代器
        }
        else
            ++iter;
    }

    for(auto iter = m.begin(); iter != m.end(); iter++)
    {
        std::cout << iter->first <<" " << iter->second << std::endl;
    }
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

  //错误的写法是对无效的迭代器做++操作。