免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3262 | 回复: 2
打印 上一主题 下一主题

[C++] Map 查找问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-24 10:23 |只看该作者 |倒序浏览
代码定义部分如下,出现了记录能入到容器中,可用find函数查找时却说查找不到是什么原因,是因为比较函数出现问题,还是因为memcmp函数的问题?(换了注释部分的比较函数却可以查找),谢谢
Record:  Type:SMS,Code:00000001,Add:10661700,Sub:-


typedef struct BUS_SCRIPT_KEY{
    char BusType[8 + 1];           
    char BusCode[30 + 1];         
    char AddCode[30 + 1];         
    char SubBusCode[30 + 1];      
};

struct ltcom
{
    bool operator() (const BUS_SCRIPT_KEY &x1, const BUS_SCRIPT_KEY &x2) const
    {
        return memcmp(&x1,&x2,sizeof(BUS_SCRIPT_KEY)) < 0;
    }
};

typedef std::map<BUS_SCRIPT_KEY,int,ltcom> BSMap;
typedef std::map<BUS_SCRIPT_KEY,int,ltcom>::iterator BSMapIt;

/*
bool operator < (const BUS_SCRIPT_KEY & x1, const BUS_SCRIPT_KEY & x2)
{
    int iRet = 0;
    if((iRet = strcmp(x1.BusType, x2.BusType)) == 0) {
        if((iRet = strcmp(x1.BusCode, x2.BusCode)) == 0) {
            if((iRet = strcmp(x1.AddCode, x2.AddCode)) == 0) {
                if((iRet = strcmp(x1.SubBusCode, x2.SubBusCode)) == 0) {
                }
            }
        }
    }
    return iRet < 0;
}

typedef std::map<BUS_SCRIPT_KEY,BUS_SCRIPT_VAL> BSMap;
typedef std::map<BUS_SCRIPT_KEY,BUS_SCRIPT_VAL>::iterator BSMapIt;
*/

论坛徽章:
0
2 [报告]
发表于 2009-08-24 11:30 |只看该作者
我晕倒,
memcmp(&x1,&x2,sizeof(BUS_SCRIPT_KEY)) < 0;

if((iRet = strcmp(x1.BusType, x2.BusType)) == 0) {
        if((iRet = strcmp(x1.BusCode, x2.BusCode)) == 0) {
            if((iRet = strcmp(x1.AddCode, x2.AddCode)) == 0) {
                if((iRet = strcmp(x1.SubBusCode, x2.SubBusCode)) == 0) {
                }
            }
        }
    }

这两段代码的功能根本不一致嘛 ,(在全部相同的情况下还是一致的!)
可能出现这样的情况么:
char BusType[8 + 1]=  hello\0\0\t\0
char compare[8 + 1]= hello\0\0\b\0

如果strcmp的话,是相等的,memcmp则不等

论坛徽章:
0
3 [报告]
发表于 2009-08-24 11:34 |只看该作者
谢谢,恩,那就是初始化数据有问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP