boost unordered map 小试

本文介绍如何将原有的 hash_map 替换为 Boost 的 unordered_map,并实现 iequal_to 和 ihash 方法来保持代码的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了将之前代码的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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值