Hash 如何自定义无序的_映射,使其使用自定义哈希函数和自定义相等函数?

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) {} ~

如何为无序映射编写自己的哈希和权益运算符,以便使用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) {}
        ~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;
注意一个非常好的哈希函数是: