c++ stl中map的问题

在下面的代码中,我输入311531然后输出的是130103为什么使用erase之后还会存在map[1]?难道使用erase之后只是使map[1]=0而已吗?还有,为什么第... 在下面的代码中,我输入
3
1 1
5 3
1
然后输出的是
1 3
0 1
0 3
为什么使用erase之后还会存在map[1]?
难道使用erase之后只是使map[1]=0而已吗?
还有,为什么第二行实际会输出map[0]?
在创建map时实际是创建了一个很长的数组吗?
初学C++的stl,请讲得通俗易懂一点,谢谢!

代码:
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<int,int> a;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int x,y;
cin>>x>>y;
a[x]=y;
}

for(map<int,int>::iterator i=a.begin();i!=a.end();i++)
cout<<i->second<<" ";
cout<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;

int z;
cin>>z;
a.erase(a.find(z));

for(map<int,int>::iterator i=a.begin();i!=a.end();i++)
cout<<i->second<<" ";
cout<<endl;
}
展开
 我来答
裸跳的蚂蚱
2016-12-05 · TA获得超过113个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:100万
展开全部
你犯了一个错误,就是map的[ ]是重载的。比如你写的map[1],当调用这个函数时,它会检查map中是否有key为1的pair。如果没有就添加。所以你使用map[1]这种形式总会有值输出。另外map使用的并不是数组,而是红黑树。
更多追问追答
追问
那erase是否会删除原有的key?还是只是删除key的数据,实际上key还是保留着?不懂红黑树。。
那erase是否会删除原有的key?还是只是删除key的数据,实际上key还是保留着?不懂红黑树。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式