std::map自定义类型key

故事背景:最近的需求须要把一个结构体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;编译

相关文章
相关标签/搜索