1 for循环遍历std::map删除指定元素

1.1 第一种方式

#include <iostream>
#include <map>
#include <string>

void PrintMap(const std::map<int, std::string>& in_map)
{
    std::map<int, std::string>::const_iterator iter;
    for (iter = in_map.begin(); iter != in_map.end(); iter++)
    {
        std::cout << iter->first << " " << iter->second << std::endl;
    }
}

int main()
{
    std::map<int, std::string> tempMap;

    for (int i = 0; i < 20; ++i)
    {
        tempMap.insert(std::make_pair(i, std::to_string(i)));
    }

    // 删除元素
    std::map<int, std::string>::iterator iter;
    for (iter = tempMap.begin(); iter != tempMap.end(); )
    {
        if (iter->first == 5 || iter->first ==19)
        {
            iter = tempMap.erase(iter);
        }
        else
        {
            ++iter;
        }

    }

    PrintMap(tempMap);

}

1.2 第二种方式

#include <iostream>
#include <map>
#include <string>

void PrintMap(const std::map<int, std::string>& in_map)
{
    std::map<int, std::string>::const_iterator iter;
    for (iter = in_map.begin(); iter != in_map.end(); iter++)
    {
        std::cout << iter->first << " " << iter->second << std::endl;
    }
}

int main()
{
    std::map<int, std::string> tempMap;

    for (int i = 0; i < 20; ++i)
    {
        tempMap.insert(std::make_pair(i, std::to_string(i)));
    }

    // 删除元素
    std::map<int, std::string>::iterator iter;
    for (iter = tempMap.begin(); iter != tempMap.end(); )
    {
        if (iter->first == 5 || iter->first == 19)
        {
            tempMap.erase(iter++);
        }
        else
        {
            ++iter;
        }

    }

    PrintMap(tempMap);
}

2 while循环遍历std::map删除指定元素

2.1 第一种方式

#include <iostream>
#include <map>
#include <string>

void PrintMap(const std::map<int, std::string>& in_map)
{
    std::map<int, std::string>::const_iterator iter;
    for (iter = in_map.begin(); iter != in_map.end(); iter++)
    {
        std::cout << iter->first << " " << iter->second << std::endl;
    }
}

int main()
{
    std::map<int, std::string> tempMap;

    for (int i = 0; i < 20; ++i)
    {
        tempMap.insert(std::make_pair(i, std::to_string(i)));
    }

    // 删除元素
    std::map<int, std::string>::iterator iter = tempMap.begin();

    while (iter != tempMap.end())
    {
        if (iter->first == 5 || iter->first == 6)
        {
            iter = tempMap.erase(iter);
        }
        else
        {
            iter++;
        }
    }

    PrintMap(tempMap);

}

2.2 第二种方式

#include <iostream>
#include <map>
#include <string>

void PrintMap(const std::map<int, std::string>& in_map)
{
    std::map<int, std::string>::const_iterator iter;
    for (iter = in_map.begin(); iter != in_map.end(); iter++)
    {
        std::cout << iter->first << " " << iter->second << std::endl;
    }
}

int main()
{
    std::map<int, std::string> tempMap;

    for (int i = 0; i < 20; ++i)
    {
        tempMap.insert(std::make_pair(i, std::to_string(i)));
    }

    // 删除元素
    std::map<int, std::string>::iterator iter = tempMap.begin();

    while (iter != tempMap.end())
    {
        if (iter->first == 5 || iter->first == 6)
        {
            tempMap.erase(iter++);
        }
        else
        {
            iter++;
        }
    }

    PrintMap(tempMap);

}