求助: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中的值");
}
} 展开
/*查找逻辑 表数据加载到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中的值");
}
} 展开
3个回答
展开全部
map不需要重载>
map的排序是基于‘等价’->
a<b && !(b<a)即表明2个元素等价,在map中会被认为是重复key
该考虑map是否在什么地方修改,或者已经无效
map的排序是基于‘等价’->
a<b && !(b<a)即表明2个元素等价,在map中会被认为是重复key
该考虑map是否在什么地方修改,或者已经无效
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这需要看你的key操作符的定义,问题应该出在这一块。
追问
bool operatorrhs.a) return false;
if (brhs.b) return false;
if (crhs.c) return false;
return false;
}
这是我重载的<运算符函数,剩下的就是构造函数了,您能再帮分析下吗?谢谢!
追答
你只重载了一个操作符,还有一个>没重载,两个都要写才能正确执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询