在vc中默认key是数值类型.定义自己的类型需要重载hash函数和比较函数.
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;
};
struct hash_A{
enum
{ // parameters for hash table
bucket_size = 4, // 0 < bucket_size
min_buckets = 8 // min_buckets = 2 ^^ N, 0 < N
};
size_t operator()(const class ClassA & A)const{
// return hash<int>(A.getvalue());
return A.getvalue();
}
bool operator()(const class ClassA & a1, const class ClassA & a2)const{
return a1.getvalue() < a2.getvalue();
}
};
hash_map<ClassA, string, hash_A> hmap;
需要注意的是bucket_size 和min_buckets 是必须的,hash中要用到,不然抱错.
比较和hash函数要在一个结构中,和别的编译器中的不一样.
还有就是第二个operator在vc里是<'而在SGI等编译器里是==,要注意