• 对于一些stl自定义比较函数


    1.unorderd_map自定义键

    自定义类型

    struct my_key {
        int    num;
        string name;
    };

    1、由于unordered_map是采用哈希实现的,对于系统的类型int, string等,都已经定义好了hash函数,所以如果我们引入新的自定义类型的话,系统并不知道如何去计算我们引入的自定义类型的hash值,所以我们就需要自己定义hash函数,告诉系统用这种方式去计算我们引入的自定义类型的hash值
    自定义的hash函数如下:

    struct myHashFuc
    {
        std::size_t operator()(const my_key &key) const
        {
            return std::hash<int>()(key.num);
        }
    };

    由于我们的结构中有int和string,所以此处直接采用系统的int的哈希做法即可

    2、重载==号
    除了自定义哈希函数外
    系统计算了hash值后,还需要判断是否冲突,对于默认的类型,系统都知道怎样去判断是否相等,但不知道怎样去判断我们引入的自定义类型是否相等,所以需要我们重载==号,告诉系统用这种方式去判断2个键是否相等

    struct my_key {
        int    num;
        string name;
        my_key(){}
        ~my_key(){}
        my_key(int a, string b) : num(a), name(b){}
     
        //重载==号
        bool operator==(const my_key &t)const {
            return this->num == t.num;
        }
    };

    做完上面2步,我们就可以使用自定义类型的键的unordered_map啦
    完整代码如下:

    #include <iostream>
    #include <string>
    #include <unordered_map>
    using namespace std;
    struct my_key {
        int    num;
        string name;
        my_key(){}
        ~my_key(){}
        my_key(int a, string b) : num(a), name(b){}
        bool operator==(const my_key &t)const {
            return this->num == t.num;
        }
    };
    struct myHashFuc
    {
        std::size_t operator()(const my_key &key) const
        {
            return std::hash<int>()(key.num);
        }
    };
     
    int main()
    {
        unordered_map <my_key, bool, myHashFuc> mmp;
        my_key myuin(1, "bob");
        mmp[myuin] = true;
     
        cout << mmp[myuin] << endl;
        return 0;
    }

    2.优先队列自定义比较函数

    优先队列默认是大根堆,大的先出来。

    所以下面这个数据类型放在优先队列是大的先出来。

    priority_queue<comp> pq;
    
    
    struct comp {
        int x;
        bool operator < (const comp& n) const {
            if(x % 3 == n.x % 3) return x < n.x;
            return x%3 < n.x%3;
        }
    };
  • 相关阅读:
    Redis进阶实践之一VMWare Pro虚拟机安装和Linux系统的安装
    HTTP常见面试题
    HBase WAL原理学习
    HBase TableExistsException: hbase:namespace
    HBase常用操作之namespace
    Hbase原理、基本概念、基本架构
    hbase 修复 hbase hbck
    hbase数据备份或者容灾方案
    Hbase 日常运维
    HBase shell scan 模糊查询
  • 原文地址:https://www.cnblogs.com/downrainsun/p/11644978.html
Copyright © 2020-2023  润新知