linux平台hash_map使用示例

linux平台hash_map使用示例

 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中使用的情况一样   

你可能感兴趣的:(linux平台hash_map使用示例)