map的erase函数小结

关于map关联容器的删除c++ primer只是一笔带过,实际上不了解去使用还是有点问题,比如所以for去遍历删除指定条件的节点就有坑;索性去c++官网看例子,链接如下

http://www.cplusplus.com/reference/map/map/erase/

https://en.cppreference.com/w/cpp/container/map/erase

复制代码
    std::map<char, int> mymap;
    std::map<char, int>::iterator it;

    // insert some values:
    mymap['a'] = 10;
    mymap['b'] = 20;
    mymap['c'] = 30;
    mymap['d'] = 40;
    mymap['e'] = 50;
    mymap['f'] = 60;

    it = mymap.find('b');
    it= mymap.erase(it);                   // erasing by iterator

    mymap.erase('c');                  // erasing by key

    it = mymap.find('e');
    auto it2 = mymap.find('f');
    it2 = mymap.erase(it, it2);    // erasing by range

    // show content:
    for (it = mymap.begin(); it != mymap.end(); ++it)
        std::cout << it->first << " => " << it->second << '\n';
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
//写一个测试的遍历删除例子
    for (auto it = mymap.begin(); it != mymap.end();)
    {
        if (it->second == 20)
        {
            it = mymap.erase(it);
        }
        else
        {
            ++it;
        }
    }<br>//ps:一般而言循环遍历然后删除可能并不合适,在这种情况下,可以使用一个vector或者别的容器先保存要删除的迭代器节点,需要删除时再提出删除

总结:

map的删除函数有三种形式,1.删除给定iterator指定的那个位置;2.删除[first,last)迭代器区间的所有节点(记得是前闭后开区间),3.删除给定key的节点

1和2的返回值是指向被删除元素的下一个元素的迭代器(所以如果是区间删除是指向last,呵呵),3返回的是删除元素的个数

posted @   乐swap火  阅读(555)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示