如果map中包含若干个key为10的倍数,要删除key为10的倍数。
错误形式
#include <iostream>
#include <map>
#include <iterator>
using namespace std;
int main()
{
map<int, int> m;
for (int i = 0; i < 10; i++)
{
m.insert(pair<int, int>(10 * i, i));
}
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
if (it->first % 10 == 0)
{
m.erase(it); it--;
}
}
return 0;
}
正确形式应该为
#include <iostream>
#include <map>
#include <iterator>
using namespace std;
int main()
{
map<int, int> m;
for (int i = 0; i < 10; i++)
{
m.insert(pair<int, int>(10 * i, i));
}
for (map<int, int>::iterator it = m.begin(); it != m.end(); )
{
if (it->first % 10 == 0)
{
m.erase(it++);
}
else it++;
}
return 0;
}
因为map是用红黑树结构来做的,当删除操作时,红黑树的结构会调整