std::map自定义类型key
程序员文章站
2022-03-21 18:12:55
故事背景:最近的需求需要把一个结构体struct作为map的key,时间time作为value,定义:std::map _mapTest; 技术调研:众所周知,map是STL库中常用的关联式容器,底层实现就不多提了是平衡二叉树,今天主要关注的是map的KEY值 map有四 ......
故事背景:最近的需求需要把一个结构体struct作为map的key,时间time作为value,定义:std::map<struct, time> _maptest;
技术调研:众所周知,map是stl库中常用的关联式容器,底层实现就不多提了是平衡二叉树,今天主要关注的是map的key值
map有四个参数,第一个为_kty就是key,第二个_ty就是value,第三、四都有默认值,所以在一定的条件下可以不填
问题阐述:std::map<struct, time> _maptest;编译报错
这就是map中第三个参数的作用,提供一个less函数,比较key值间的大小,从而构建二叉树,有人问了为什么基本类型就不需要呢,这是因为基本类型可以直接进行大小比较
解决办法:
这就是map第三个参数的作用了
需要我们提供一个比较大小的仿函数,仿函数就是类似于函数的类,不过大都是重载了一些操作符如'()'号、'<'号等
完成仿函数如下:
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;
推荐阅读
-
键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集
-
键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集
-
自定义mybatis map返回类型
-
java 自定义数据类型做键,使用keySet和entrySet两种方式遍历Map集合
-
std::map自定义类型key
-
Hashtable、Map.Entry、自定义key、Stack、Properties、Collections
-
java 自定义数据类型做键,使用keySet和entrySet两种方式遍历Map集合
-
std::map自定义类型key
-
Map中自定义Key