C++ CMap查找PLookup的使用 找不到已插入的原因。 求高手指教!!!

时间:2023-02-22 09:55:17
#include<iostream>
#include<string>
#include<afxtempl.h>
#include<atlcoll.h>
using namespace std;

struct word
{
int time;
string w;
word(int t,string s)
{
w =s;
time =t;
}
word(){}
};

void LookUP(CMap<const char *,const char*,word,word &>  &mymap)
{
string a="zzg";

word newword(1,a);
CMap<const char *,const char*,word,word &>::CPair * p_pair = mymap.PLookup("zzg");
//或者 CMap<const char *,const char*,word,word &>::CPair * p_pair = mymap.PLookup(newword.w.c_str());
cout<<p_pair->value.w <<endl;
}

void main()
{
CMap<const char *,const char*,word,word &>  mymap;
word myw1(2,"zzg"),myw2(4,"tf"),myw3;
          mymap.SetAt (myw1.w.c_str(),myw1);
mymap[myw2.w.c_str()]=myw2;
LookUP(mymap);
size_t index = 0;
const char * pszkey;
POSITION ps = mymap.GetStartPosition();
while(ps)
{
mymap.GetNextAssoc(ps,pszkey,myw3);
printf("index:%d,key:%s,word:%s,time:%d\n",++index,pszkey,myw3.w.c_str(),myw3.time);
}
}

在LookUP()函数中两种方法p_pair 的值都为空(表示没找到),这是为什么呢!!!!
高手求指导啊!!!

7 个解决方案

#1


已知到

#2


CMap中不能用char*,得直接用string之类的

#3


该回复于2012-02-13 13:12:28被版主删除

#4


敲入如下代码,发现能找到啊


word dd1(2,"ddfirst");
word dd2(4,"ddtwo");
word wordret;
CMap <const char* , const char*,  word , word&> ddmap;
ddmap.SetAt("first", dd1);
ddmap.SetAt("two", dd2);

int nret = ddmap.Lookup("two", wordret );

string a="first";

word newword(1,a);
CMap<const char *,const char*,word,word &>::CPair * p_pair = ddmap.PLookup("first");

#5


进而发现 LZ的 
myw1.w.c_str 换成 "zzg"就可以找到了,估计 myw1.w.c_str(有问题啊

#6


应该是 string的问题

#7


不好意思 我知道我知道问题的原因了 ,它那个PLookup里面最后比较的时候是两个字符的指针比较的!所以怎样修改就知道了。

#1


已知到

#2


CMap中不能用char*,得直接用string之类的

#3


该回复于2012-02-13 13:12:28被版主删除

#4


敲入如下代码,发现能找到啊


word dd1(2,"ddfirst");
word dd2(4,"ddtwo");
word wordret;
CMap <const char* , const char*,  word , word&> ddmap;
ddmap.SetAt("first", dd1);
ddmap.SetAt("two", dd2);

int nret = ddmap.Lookup("two", wordret );

string a="first";

word newword(1,a);
CMap<const char *,const char*,word,word &>::CPair * p_pair = ddmap.PLookup("first");

#5


进而发现 LZ的 
myw1.w.c_str 换成 "zzg"就可以找到了,估计 myw1.w.c_str(有问题啊

#6


应该是 string的问题

#7


不好意思 我知道我知道问题的原因了 ,它那个PLookup里面最后比较的时候是两个字符的指针比较的!所以怎样修改就知道了。