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

zzg22936 2012-02-11 12:16:29
#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 的值都为空(表示没找到),这是为什么呢!!!!
高手求指导啊!!!
...全文
274 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzg22936 2012-02-14
  • 打赏
  • 举报
回复
不好意思 我知道我知道问题的原因了 ,它那个PLookup里面最后比较的时候是两个字符的指针比较的!所以怎样修改就知道了。
wshcdr 2012-02-13
  • 打赏
  • 举报
回复
应该是 string的问题
wshcdr 2012-02-13
  • 打赏
  • 举报
回复
进而发现 LZ的
myw1.w.c_str 换成 "zzg"就可以找到了,估计 myw1.w.c_str(有问题啊
wshcdr 2012-02-13
  • 打赏
  • 举报
回复
敲入如下代码,发现能找到啊


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");
fishion 2012-02-12
  • 打赏
  • 举报
回复
CMap中不能用char*,得直接用string之类的
zzg22936 2012-02-11
  • 打赏
  • 举报
回复
已知到

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧