故事背景:最近的需求须要把一个结构体struct做为map的key,时间time做为value,定义:std::map<struct, time> _mapTest;less
技术调研:众所周知,map是STL库中经常使用的关联式容器,底层实现就很少提了是平衡二叉树,今天主要关注的是map的KEY值函数
map有四个参数,第一个为_Kty就是key,第二个_Ty就是value,第3、四都有默认值,因此在必定的条件下能够不填ui
问题阐述:std::map<struct, time> _mapTest;编译报错spa
这就是map中第三个参数的做用,提供一个less函数,比较key值间的大小,从而构建二叉树,有人问了为何基本类型就不须要呢,这是由于基本类型能够直接进行大小比较3d
解决办法:code
这就是map第三个参数的做用了blog
须要咱们提供一个比较大小的仿函数,仿函数就是相似于函数的类,不过大都是重载了一些操做符如'()'号、'<'号等hash
完成仿函数以下:io
struct hash_function { bool operator ()(const customize &c1, const customize &c2) const { if (c1._id != c2._id) { return c1._id < c2._id; } if (c1._sum != c2._sum) { return c1._sum < c2._sum; } return false; } }
实际运用:std::map<struct, time, hash_function> _mapTest;编译