C++ 有关map的insert方法的问题: 如下代码,调用insert方法,最后map中只有最后输入的值,甚是不解。。

map<char*,char*>acc;map<char*,char*>::iteratorip;charsID[10];intmain(){for(inti=0;i<4... map<char*, char*> acc;
map<char*,char*>::iterator ip;
char sID[10];
int main()
{
for(int i=0;i<4;i++)
{
cin >> sID;
acc[sID] = sID;
}

for(ip = acc.begin(); ip!=acc.end();ip++)
cout << (*ip).first << ", " << (*ip).second << endl;
return 0;
}
每次输入的值都是不同的。。最后acc.size()竟然等于1。。好像全都是覆盖添加。
求解!!谢啦!
展开
 我来答
百度网友9308069
2011-12-10 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1917万
展开全部
因为输入都存在sid[10]中。char*不代表一整串,而仅仅代表首地址。
每次存char* 都是同一个地址,
比如4次都是acc[1234]=1234;自然导致acc在内存中size是1。
map属于C++的STL,建议用与其配套的STL的string来存储。
即使要用char *也要预先分配足够的空间。更正:
===========
#include<iostream>
#include<map>
using namespace std;
map<char*, char*> acc;
map<char*,char*>::iterator ip;
int main()
{
char *a;
for(int i=0;i<4;i++)
{
a=new char[10]();
cin >> a;
acc[a] = a;
}
for(ip = acc.begin(); ip!=acc.end();++ip)
cout << (*ip).first << ", " << (*ip).second << endl;
return 0;
}
更多追问追答
追问
非常感谢!问题解决啦~!
但是我还是有点不懂。。
你把a的类型改为char * ,然后每次循环都让a=new char[10]() 就能使a的地址每次都不同了吗?望不吝赐教
追答
每new一次都是新地址,4次循环有4个;sID[10]始终只有一个地址,
把map 按map 理解,就会发现acc[sID] = sID;的问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式