关于在map中做查询的问题,请帮忙看看。

gzRedflash 2004-11-24 09:31:36
在程序中,我使用了map。遇到点问题。情况如下。不过不知道怎么回事。请大家帮忙看看。
先定义
typedef vector<int> vint;
typedef map<int,vint> cb;
typedef cb::value_type cb_type;

然后使用
cb MyCa;
vint vI;
vI.push_back(1);
vI.push_back(11);
vI.push_back(111);
MyCa.insert(cb_type(1,vI));
vI.push_back(2);
vI.push_back(222);
vI.push_back(2222);
vI.push_back(22);
MyCa.insert(cb_type(2,vI));
vI.push_back(3);
vI.push_back(33);
vI.push_back(333);
vI.push_back(3333);
MyCa.insert(cb_type(23,vI));

vint *pI;
cb::iterator itCa;
itCa = MyCa.find(2);
if (itCa != MyCa.end())
{
pI = &(cb_type(*itCa).second);

for (int i = 0; i < pI->size(); i++)
ShowMessage(IntToStr((*pI)[i]));
}
我的目的是查询map中key == 2的记录。然后定义一个同类型的指针指向它。
编译没错。运行时,的确找到了kay为2的记录。因为itCa != MyCa.end() 为true了。
但是循环打印的时候,第一个值打印的是 13845008 明显错了。接着就是11,111,2,222,2222,22

如果该一下程序,
vint pI;
cb::iterator itCa;
itCa = MyCa.find(2);
if (itCa != MyCa.end())
{
pI = cb_type(*itCa).second;

for (int i = 0; i < pI.size(); i++)
ShowMessage(IntToStr(pI[i]));
}
打印结果是1,11,111,2,222,2222,22
完全不是我想要的2,222,2222,22
请大家帮看看,第一,为什么指针有问题。第二,为什么结果把第一个key对应的也打印了。谢谢。
...全文
72 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanye2008 2004-11-24
  • 打赏
  • 举报
回复
(九尾妖狐) 说的还真是一针见血呀!
gzRedflash 2004-11-24
  • 打赏
  • 举报
回复
不过关键的问题不是这个。已经解决了就不多说了。结帖
gzRedflash 2004-11-24
  • 打赏
  • 举报
回复
已经发现了。的确是比较低级。不过当时出现问题的时候不是因为这个。
fkuefgefkuang 2004-11-24
  • 打赏
  • 举报
回复
再给你个提示如果你这里这么写
vint pI;
cb::iterator itCa;
itCa = MyCa.find(23);//将2改为23
if (itCa != MyCa.end())
{
pI = cb_type(*itCa).second;

for (int i = 0; i < pI.size(); i++)
ShowMessage(IntToStr(pI[i]));
}
你的结果会是1,11,111,2,222,2222,22,3,33,333,3333
fkuefgefkuang 2004-11-24
  • 打赏
  • 举报
回复
cb MyCa;
vint vI;
vI.push_back(1);
vI.push_back(11);
vI.push_back(111);
MyCa.insert(cb_type(1,vI));
vI.push_back(2);
vI.push_back(222);
vI.push_back(2222);
vI.push_back(22);
MyCa.insert(cb_type(2,vI));
vI.push_back(3);
vI.push_back(33);
vI.push_back(333);
vI.push_back(3333);
MyCa.insert(cb_type(23,vI));
自己好好看看
如果不会用vector<>回家再查查书,这么明显示的错误,我不想多说,
MCR 2004-11-24
  • 打赏
  • 举报
回复
这样用:
for (itCa = MyCa.begin(); itCa != MyCa.end(); itCa ++)

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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