求助:C++ map查找问题

我写了个程序,把数据库一张表的数据加载到map里查找,为此定义了两个类:一个key类,对应表的主键(主键由多个字段构成),另一个是value类(除主键外的其他字段),也重... 我写了个程序,把数据库一张表的数据加载到map里查找,为此定义了两个类:一个key类,对应表的主键(主键由多个字段构成),另一个是value类(除主键外的其他字段),也重载了key类的<运算符。加载表数据daomap时是正确的,执行一次查找(find)也是正确的。但是执行多次查找就出现了问题,请求大家的帮助,谢谢!!
/*查找逻辑 表数据加载到tableMap变量里 Key里的三个字段对应表的主键,在类里都定义为public变量了 变量a和c是int型的,b是string类型的*/
Key rk;rk.a=1;rk.b="aa";rk.c=3;
map<Key,Value >::iterator it = tableMap.find(rk);
/*测试时if分支走不到的,因为在map里没有查找到数据 这一步是正确的 然后再走到else分支就出错了*/
if (it!=tableMap.end())
{
printf("打印value中的值");
}
else
{
/*在这将b变量改成"*"查找,其实表里也没这样的记录,但是莫名奇妙的就查到了,但是在打印变量时都是垃圾值*/
rk.b="*";
it = tableMap.find(rk);
if (it!=tableMap.end())
{
printf("打印value中的值");
}
}
展开
 我来答
果建翼
2011-10-14 · TA获得超过7923个赞
知道大有可为答主
回答量:1684
采纳率:0%
帮助的人:2421万
展开全部
把你Key的定义贴出来看看。我怀疑你的类出现指针悬挂了。

另外一楼的,默认的map是不需要operator >的。楼主定义的operator < 也符合严格弱序化的要求,没有问题(虽然代码比较啰嗦)。
堕落DE青蛙
2011-10-14 · TA获得超过108个赞
知道答主
回答量:90
采纳率:0%
帮助的人:99.5万
展开全部
map不需要重载>
map的排序是基于‘等价’->
a<b && !(b<a)即表明2个元素等价,在map中会被认为是重复key
该考虑map是否在什么地方修改,或者已经无效
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ppphex
2011-10-14 · TA获得超过325个赞
知道小有建树答主
回答量:266
采纳率:100%
帮助的人:191万
展开全部
这需要看你的key操作符的定义,问题应该出在这一块。
追问
bool operatorrhs.a) return false;
if (brhs.b) return false;
if (crhs.c) return false;
return false;
}
这是我重载的<运算符函数,剩下的就是构造函数了,您能再帮分析下吗?谢谢!
追答
你只重载了一个操作符,还有一个>没重载,两个都要写才能正确执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式