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;
} 展开
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;
} 展开
1个回答
展开全部
你犯了一个错误,就是map的[ ]是重载的。比如你写的map[1],当调用这个函数时,它会检查map中是否有key为1的pair。如果没有就添加。所以你使用map[1]这种形式总会有值输出。另外map使用的并不是数组,而是红黑树。
更多追问追答
追问
那erase是否会删除原有的key?还是只是删除key的数据,实际上key还是保留着?不懂红黑树。。
那erase是否会删除原有的key?还是只是删除key的数据,实际上key还是保留着?不懂红黑树。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询