关于在map中做查询的问题,请帮忙看看。
在程序中,我使用了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对应的也打印了。谢谢。