Hash 如何自定义无序的_映射,使其使用自定义哈希函数和自定义相等函数?
如何为无序映射编写自己的哈希和权益运算符,以便使用char*而不是std::string作为键?Hash 如何自定义无序的_映射,使其使用自定义哈希函数和自定义相等函数?,hash,unordered-map,Hash,Unordered Map,如何为无序映射编写自己的哈希和权益运算符,以便使用char*而不是std::string作为键?class PtrStr class PtrStr { protected: const char *m_pcStr; const int m_nSize; public: PtrStr(const char *pcStr, int nSize) : m_pcStr(pcStr), m_nSize(nSize) {} ~
class PtrStr
class PtrStr
{
protected:
const char *m_pcStr;
const int m_nSize;
public:
PtrStr(const char *pcStr, int nSize) : m_pcStr(pcStr), m_nSize(nSize) {}
~PtrStr() {};
const char *GetStr() const { return m_pcStr; }
const int GetSize() const { return m_nSize; }
};
namespace std
{
namespace tr1
{
template<> struct hash<PtrStr>
{
std::size_t operator()(PtrStr const &key) const
{
return MyHashMethod(key);
}
};
}
template<> struct equal_to<PtrStr>
{
bool operator()(const PtrStr &keyA, const PtrStr &keyB) const
{
return (strcmp(const_cast<PtrStr &>(keyA).GetStr(), const_cast<PtrStr &>(keyB).GetStr()) == 0);
return (strcmp(keyA.GetStr(), keyB.GetStr()) == 0);
}
};
}
typedef std::tr1::unordered_map<PtrStr, int> unorderedCharMap;
typedef std::tr1::unordered_map<PtrStr, int>::iterator unorderedCharMapItr;
{
受保护的:
const char*m_pcStr;
const int m_nSize;
公众:
PtrStr(const char*pcStr,int nSize):m_pcStr(pcStr),m_nSize(nSize){}
~PtrStr(){};
const char*GetStr()const{return m_pcStr;}
const int GetSize()const{return m_nSize;}
};
名称空间标准
{
名称空间tr1
{
模板结构哈希
{
std::size\u t运算符()(PtrStr const&key)const
{
返回MyHashMethod(key);
}
};
}
模板结构等于
{
布尔运算符()(常数PtrStr&keyA,常数PtrStr&keyB)常数
{
返回(strcmp(const_cast(keyA).GetStr(),const_cast(keyB).GetStr())==0);
返回(strcmp(keyA.GetStr(),keyB.GetStr())==0);
}
};
}
typedef std::tr1::无序_映射无序charmap;
typedef std::tr1::无序_映射::迭代器无序charmapitr;
注意一个非常好的哈希函数是: