读书人

关于std:map的一个有关问题~

发布时间: 2012-02-20 21:18:24 作者: rapoo

关于std::map的一个问题~~
typedef struct tagSessionID
{
guint16 nSrcPort;
guint16 nDestPort;
guint32 nSrcIP;
guint32 nDestIP;
bool operator < (tagSessionID const& SessionID) const
{
return memcmp(this, &SessionID, sizeof(tagSessionID));
}
} SessionID, *PSessionID;

现在insert一条记录:
map <SessionID,int> m_mDS;
SessionID id;
.......数据初始化.........
pair <map <SessionID,int> ::iterator, bool> retval = m_mDS.insert( dsPair(id,100) );


问题出来了~~ 现在retval.second的值是false 证明已经存在这个Key
但是我用 m_mDS.fint(id) 竟然找不到这一项

为什么~~~ 帮我解决一下

[解决办法]
改为 memcmp(this, &SessionID, sizeof(tagSessionID)) < 0 试试看
[解决办法]
bool operator < (tagSessionID const& SessionID) const
{
return memcmp(this, &SessionID, sizeof(tagSessionID));
}

memcmp 返回 <0,=0,> 0分别表示s1 <,=,> s2
和本意有一些出入
[解决办法]
bool operator < (tagSessionID const& SessionID) const
{
if (nSrcPort < SessionID.nSrcPort)
return true;

if (nSrcPort == SessionID.nSrcPort)
{
if (nDestPort < SessionID.nDestPort)
return true;

if (nDestPort == SessionID.nDestPort)
{
if (nSrcIP < SessionID.nSrcIP)
return true;

if (nSrcIP == SessionID.nSrcIP)
{
return nDestIP < SessionID.nDestIP;
}

return false;
}

return false;
}

return false;
}
[解决办法]
memcmp方法
返回值 <0时 buf1 less than buf2
返回值0时  buf1 identical to buf2
返回值> 0时 buf1 greater than buf2

再重载一个==操作 应该就可以

bool operator < (tagSessionID const& SessionID) const
{
return memcmp(&nSrcIP, &SessionID.nSrcIP, sizeof(tagSessionID)) <0?true:false;
}

bool operator == (tagSessionID const& SessionID)
{
if( (nSrcIP == SessionID.nSrcIP) && (nDestIP == SessionID.nDestIP)
&& (nSrcPort == SessionID.nSrcPort) && (nDestPort == SessionID.nDestPort))
{
return true;
}
else
{
return false;
}
}

读书人网 >C语言

热点推荐