首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-20 
关于std::map的一个问题~~typedefstructtagSessionID{guint16nSrcPortguint16nDestPortguint32nSrcIPgu

关于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;
}
}

热点排行