zoukankan      html  css  js  c++  java
  • 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 << '
    ';
    //写一个测试的遍历删除例子
       	for (auto it = mymap.begin(); it != mymap.end();)
    	{
    		if (it->second == 20)
    		{
    			it = mymap.erase(it);
    		}
    		else
    		{
    			++it;
    		}
    	}
    //ps:一般而言循环遍历然后删除可能并不合适,在这种情况下,可以使用一个vector或者别的容器先保存要删除的迭代器节点,需要删除时再提出删除

    总结:

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

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

  • 相关阅读:
    ZOJ 1234 Chopsticks
    ZOJ1238 Guess the Number
    ZOJ 1243 URLs
    IP地址的分类
    可变字符串NSMutableString(ios)
    Object-C 声明属性为什么用下划线
    @property的属性weak nonatomic strong等介绍(ios)
    super self的区别(ios)
    iOS概述
    多态
  • 原文地址:https://www.cnblogs.com/Cxiangyang/p/13788127.html
Copyright © 2011-2022 走看看