在C++模板类map中一个参数为Compare类型,该类型为一个比较函数,其完整定义如下:

template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

函数作为类进行传递,该类采用了重载操作符()来实现函数指针到类的转变。在实际中也可以仿照此风格写自己的类。

 template <typename Key, typename Value, class Hash >
class A {
Hash hash_fn;
public:
A():hash_fn(Hash()) { } size_t hashCode(Key key) { return hash_fn(key);} };

第三个参数Hash为函数对象,该对象通过重载操作符()来实现,其一个字符串类型的Key定义如下:

 struct str_hash {
size_t operator()(const std::string& str) const
{
return ;
}
};

当调用hash_fn(key)函数时,该重载函数被调用,这样就实现了转换。由于C++标准库中包含有大量此类型风格的类,我们就可以通过默认参数来调用标准类,这样上面的模板类A就可以定义如下:

template <typename Key, typename Value, class Hash = std::hash<Key>>

测试程序如下:

 int main(int argc, char *argv[]) {

     A<std::string , int, str_hash> a;
std::cout << "hashCode:" << a.hashCode("abc") << std::endl; A<std::string,int,std::hash<std::string>> h;
std::cout << h.hashCode("abc") << std::endl; A<std::string,int> h2;
std::cout << h.hashCode("abc") << std::endl; return ;
}

测试结果如下:

 functiontem
hashCode:

最新文章

  1. MYSQL-用户操作
  2. sql索引实例
  3. pt-query-digest用法
  4. GIT用法总结
  5. IIS7 “拒绝访问临时目录”
  6. change netbeans look and feel
  7. JAVA8永久代
  8. editpuls查找替换通配符
  9. Linux内核是如何创建一个新进程的?
  10. &amp;quot;CoolReaper&amp;quot; --酷派手机后门
  11. MVC view视图获取Html.RenderAction方式带来的参数
  12. Git的安装
  13. IDL 实现求算 DEM 坡度坡向
  14. springMvc注解之@ResponseBody和@RequestBody
  15. Linux基础(三)
  16. Vue.js—组件快速入门以及实例应用
  17. maven构建geotools应用工程
  18. Spring MVC (JDK8+Tomcat8)
  19. 微信小程序开发-tabbar组件
  20. BN算法

热门文章

  1. Displaying Window In Center In Oracle Forms 6i
  2. C#的多态性
  3. 第四章· ucos系统及其任务
  4. 让下拉框中同时显示Key与Value
  5. zookeeper第二课 客户端的简单命令
  6. html5 drag and drop
  7. mysql exists 和 in的效率比较
  8. Less入门到上手——前端开发利器&lt;一&gt;
  9. Head First 设计模式 --4 工厂模式 抽象工厂模式
  10. C++ Primer 第九章 顺序容器