hash_map<CTest , int, MyHashCompare> CHash;
struct IHashable
{
virtual unsigned long hash_value() const = 0;
virtual bool operator < (const IHashable& val) const = 0;
virtual IHashable& operator = (const IHashable& val) = 0;
};
class CTest : public IHashable
{
public:
int m_value;
CString m_message;
public:
CTest() : m_value(0) {}
CTest(const CTest& obj)
{
m_value = obj.m_value;
m_message = obj.m_message;
}
public:
virtual IHashable& operator = (const IHashable& val) {
m_value = ((CTest&)val).m_value;
m_message = ((CTest&)val).m_message;
return(*this);
}
virtual unsigned long hash_value() const {
// 這里使用類中的m_value域計算hash值,也可以使用更復雜的函式計算所有域總的hash值
return(m_value ^ 0xdeadbeef);
}
virtual bool operator < (const IHashable& val) const {
return(m_value < ((CTest&)val).m_value);
}
};
template<class _Tkey>
class MyHashCompare : public hash_compare<_Tkey>
{
public:
size_t operator()(const _Tkey& _Key) const {
return(_Key.hash_value());
}
bool operator()(const _Tkey& _Keyval1, const _Tkey& _Keyval2) const {
return (comp(_Keyval1, _Keyval2));
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121529.html
標籤:C++ 語言
上一篇:求助帖!!!
