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