c++ - 从 std::map 中删除元素时出错
问题描述
我正在尝试从 std::map 中删除一些元素。特别是具有
值 = 100
应该删除。但是,在运行以下代码后,会出现错误。在 erase(it) 方法之后,一个值为 100 的元素出现在剩余的映射中。错误在哪里?
代码:
#include <iostream>
#include <map>
int main() {
std::map<int, int> outcomes;
outcomes.clear();
if ( !outcomes.insert( std::make_pair( 10, 1 ) ).second )
return 0;
if ( !outcomes.insert( std::make_pair( 11, 100 ) ).second )
return 0;
if ( !outcomes.insert( std::make_pair( 12, 100 ) ).second )
return 0;
if ( !outcomes.insert( std::make_pair( 13, 100 ) ).second )
return 0;
if ( !outcomes.insert( std::make_pair( 14, 100 ) ).second )
return 0;
if ( !outcomes.insert( std::make_pair( 15, 101 ) ).second )
return 0;
if ( !outcomes.insert( std::make_pair( 16, 101 ) ).second )
return 0;
if ( !outcomes.insert( std::make_pair( 17, 100 ) ).second )
return 0;
std::map<int, int>::iterator it = outcomes.begin();
while(it != outcomes.end())
{
std::cout<<it->first<<" :: "<<it->second<<std::endl;
it++;
}
it = outcomes.begin();
while(it != outcomes.end())
{
if( it->second == 100 )
outcomes.erase(it);
it++;
}
std::cout << "after delete" << std::endl;
it = outcomes.begin();
while(it != outcomes.end())
{
std::cout<<it->first<<" :: "<<it->second<<std::endl;
it++;
}
return 0;
}
结果如下:
10 :: 1
11 :: 100
12 :: 100
13 :: 100
14 :: 100
15 :: 101
16 :: 101
17 :: 100
after delete
10 :: 1
14 :: 100
15 :: 101
16 :: 101
解决方案
推荐阅读
- c++ - Qt Creator 找不到主函数
- postgresql - postgres sql文件转储显示不同的字符
- python - 如何“松散地”检查字符串是否与列表中的另一个字符串匹配
- firebase - Firebase 存储安全规则,允许公共或所有者私有文件访问
- go - 重新平衡树后如何更改接收器类型(根节点)
- r - 如何允许 selectizeInput 允许用户输入新条目以及加载一些旧条目
- http - 将 DDNS (noip.com) 与 ngrok 一起使用
- c# - 设备孪生:如何在 C# 中读取/写入属性
- assembly - x64 似乎不像 x86 那样接受 END 指令中的入口点。这种语法变化有什么具体原因吗?
- audio - 如何在 pi 上正确安装 portaudio