读书人

关于map为何得不到想要的结果?解决

发布时间: 2012-05-20 16:03:12 作者: rapoo

关于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

读书人网 >C++

热点推荐