Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 345, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

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

posted on 2015-01-02 15:51 Benjamin 阅读(766) 评论(0)  编辑 收藏 引用 所属分类: linux


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理