自定义类型使用hash_map时自定义hash函数

来源:互联网 发布:linux http proxy 编辑:程序博客网 时间:2024/06/04 01:14

#include <hash_map>
#include <string>
#include <iostream>

using namespace std;
//define the class
class ClassA{
        public:
        ClassA(int a):c_a(a){}
        int getvalue()const { return c_a;}
        void setvalue(int a){c_a;}
        private:
        int c_a;
};

//1 define the hash function
struct hash_A{
        size_t operator()(const class ClassA & A)const{
                //  return  hash<int>(classA.getvalue());
                return A.getvalue();
        }
};

//2 define the equal function
struct equal_A{
        bool operator()(const class ClassA & a1, const class ClassA & a2)const{
                return  a1.getvalue() == a2.getvalue();
        }
};


//可以在一个struct中同时定义两个函数

struct hash_string
{
 // 1. define the hash function
 size_t operator()(const string& str) const
 {
   unsigned long __h = 0;
   for (size_t i = 0 ; i < str.size() ; i ++)
    __h = 5*__h + str[i];
   return size_t(__h);
 }

 // 2. define the equal function
 bool operator()(const string& p1, const string& p2) const{
   return p1 == p2;
 }
};
int main()
{
    __gnu_cxx::hash_map<string, string, hash_string> strHMap;
    __gnu_cxx::hash_map<ClassA, string, hash_A, equal_A> hmap;

        ClassA a1(12);
        hmap[a1]="I am 12";
        ClassA a2(198877);
        hmap[a2]="I am 198877";
        
        strHMap["sss"] = "dddd";
        cout<<hmap[a1]<<endl;
        cout<<hmap[a2]<<endl;
        return 0;

}


0 0
原创粉丝点击