关于map,为何得不到想要的结果?急!
已知文本test.txt内容如下:
-3.284528 zhang
-6.09183 wang
-5.47386 li
-4.658311 ji
-5.719248 kk
-3.468149 se
-5.354424 you
-4.651674 liu
-5.174396 huang
-4.711619 kuang
程序代码如下:
- C/C++ code
#include<map>#include<iostream>using namespace std;int main(){ map<char *, float> wf; FILE *fp=fopen("D:\\test.txt","r"); char pData[128]={0}; int n=0; while(fgets(pData,128,fp)){ int len=strlen(pData); pData[len-1]=0; char *p=pData,*q=pData; while(*p!=' ')p++; *p=0;p++; wf[p]=atof(q); cout<<p<<" "<<q<<endl; } fclose(fp); cout<<"___________"<<endl; for(map<char *,float>::iterator it=wf.begin();it!=wf.end();++it){ cout<<it->first<<" "<<it->second<<endl; } return 0;}为何输出是:
zhang -3.284528
wang -6.09183
li -5.47386
ji -4.658311
kk -5.719248
se -3.468149
you -5.354424
liu -4.651674
huang -5.174396
kuang -4.711619
___________
-5.47386
kuang -4.71162
Press any key to continue
横线上下的内容不一样呢?
[解决办法]
wf[p]=atof(q);
悲剧了。。 楼主能说明p是什么? 。。。map<char *, float> wf;的key是地址?
[解决办法]
map<char *, float> wf;
看楼主的意思似乎应该改成:
map<float, char*> wf;
模板参数的第一个是key,第二个是value
[解决办法]
- C/C++ code
#include<iostream>using namespace std;int main(){ map<string, float> wf;//换成string FILE *fp=fopen("D:\\test.txt","r"); char pData[128]={0}; int n=0; while(fgets(pData,128,fp)){ int len=strlen(pData); pData[len-1]=0; char *p=pData,*q=pData; while(*p!=' ')p++; *p=0;p++; wf[p]=atof(q); cout<<p<<" "<<q<<endl; } fclose(fp); cout<<"___________"<<endl; for(map<char *,float>::iterator it=wf.begin();it!=wf.end();++it){ cout<<it->first<<" "<<it->second<<endl; } return 0;}
[解决办法]
map<char*, float> char*地址啊,建议用string