1 #include <string>
2 #include <iostream>
3 #include <ext/hash_map>
4 using namespace __gnu_cxx;
5
6 //define the class
7 class ClassA{
8 public:
9 ClassA(int a):c_a(a){}
10 int getvalue()const { return c_a;}
11 void setvalue(int a){c_a;}
12 private:
13 int c_a;
14 };
15
16 //1 define the hash function
17 struct hash_A
18 {
19 size_t operator()(const class ClassA & A)const
20 {
21 // return hash<int>(classA.getvalue());
22 return A.getvalue();
23 }
24 };
25
26
27 //2 define the equal function
28 struct equal_A
29 {
30 bool operator()(const class ClassA & a1, const class ClassA & a2)const
31 {
32 return a1.getvalue() == a2.getvalue();
33 }
34 };
35
36 struct foo
37 {
38 int a ;
39 int b ;
40 foo(int x,int y):a(x),b(y) {};// ok, 先初始化i,后初始化j
41 foo(){};
42 };
43 int main()
44 {
45 hash_map<ClassA, foo, hash_A, equal_A> hmap;
46
47 ClassA a1(12);
48 foo t1(122,233);
49 hmap[a1]=t1;
50
51 ClassA a2(198877);
52 foo t2(198877,6698);
53 hmap[a2]=t2;
54
55 std::cout<<hmap[a1].a<<std::endl;
56 std::cout<<hmap[a2].b<<std::endl;
57
58 hash_map<ClassA, foo, hash_A, equal_A>::iterator it = hmap.find(12);
59 if(it != hmap.end())
60 {
61 std::cout<<it->second.a<<std::endl;
62 }
63
64 foo t3(43,67);
65 hmap.insert(pair<int, foo>(78,t3));
66 return 0;
67 }
68
如果键值是指针可这样写:hash_map<int,classA*>,key是int,classA*是value的类型,和vc中使用的情况一样