为了将之前代码的hash_map更改为boost的unordered_map,查找了一些资料。
最后添加了iequal_to 和ihash两个方法才得以没有做大的改动。
struct key_cmp_fun
{
bool operator()(const char *p1,const char *p2) const
{
return (0x00 == strcmp(p1,p2));
}
};
#ifdef __USE_BOOST_UNORDERED_MAP__
struct iequal_to
: std::binary_function<char*, char*, bool>
{
bool operator()(char* const& x,
char* const& y) const
{
return (0x00 == strcmp(x,y));
}
};
struct ihash
: std::unary_function<char*, std::size_t>
{
std::size_t operator()(char* const& x) const
{
std::size_t seed = 0;
boost::hash<std::string> chash;
seed = chash(std::string(x));
return seed;
}
};
#endif
#ifndef __USE_BOOST_UNORDERED_MAP__
typedef __gnu_cxx::hash_map<char* , void*,__gnu_cxx::hash<char*>, key_cmp_fun > COM_HASH_MAP_T;
typedef __gnu_cxx::hash_map<char* , void*,__gnu_cxx::hash<char*>, key_cmp_fun >::value_type COM_HASH_MAP_VALUE_TYPE;
typedef __gnu_cxx::hash_map<char* , void*,__gnu_cxx::hash<char*>, key_cmp_fun >::iterator COM_HASH_MAP_ITER;
#else
typedef boost::unordered_map<char* , void*,ihash, iequal_to > COM_HASH_MAP_T;
typedef boost::unordered_map<char* , void*,ihash, iequal_to >::value_type COM_HASH_MAP_VALUE_TYPE;
typedef boost::unordered_map<char* , void*,ihash, iequal_to >::iterator COM_HASH_MAP_ITER;
#endif