MFC CMap 自定义比较方法
仿照以下写法即可实现:
实现一个CString的比较
- 先创建引用CString的类
class MyCompare
{
public:
MyCompare(const CString& str) : m_refStr(str)
{
}
operator const CString() const
{
return m_refStr;
}
const CString& m_refStr;
};
- 哈希码函数实现
template<>
AFX_INLINE UINT AFXAPI HashKey(MyCompare key)
{
return HashKey((LPCTSTR)key.m_refStr);
}
- 比较函数实现
template<>
BOOL AFXAPI CompareElements(const CString* pElement1, const MyCompare* pElement2)
{
return (*pElement1) == pElement2->m_refStr;
}
示例代码
#include <afxtempl.h>
class MyCompare
{
public:
MyCompare(const CString& str) : m_refStr(str)
{
}
operator const CString() const
{
return m_refStr;
}
const CString& m_refStr;
};
template<>
AFX_INLINE UINT AFXAPI HashKey(MyCompare key)
{
return HashKey((LPCTSTR)key.m_refStr);
}
template<>
BOOL AFXAPI CompareElements(const CString* pElement1, const MyCompare* pElement2)
{
return (*pElement1) == pElement2->m_refStr;
}
int main(int argc, char *argv[])
{
CMap<CString, MyCompare, int, int> mapStr;
mapStr[CString("asdf")] = 1;
mapStr[CString("asdf")] = 2;
mapStr[CString("zzzz")] = 10;
int nRes = 0;
mapStr.Lookup(CString("zzzz"), nRes);
return 0;
}