如何让unordered_map支持pair作为键值(泛型版)

template<class T1, class T2> 
struct pair_hash//没这个pair 就不能在unorder——map快乐的玩耍了
{
    size_t operator() (const pair<T1, T2>& p) const
    {
        return hash<T1>()(p.first) ^ hash<T2>()( p.second);//异或思想
    }
    //如果遇到了<3,5>和<5,3>怎么办,皮神有想法,再把两个hash判断一遍
    
    bool operator()(const pair<T1,T2> &lhs, const pair<T1,T2> &rhs) const
    {
        return equal_to<T1>()(lhs.first,rhs.first) && equal_to<T2>()(lhs.second,rhs.second);
    }
};

像python那样将任何对象变为dict的键值,C++把原有的hash函数删去了(处于性能考虑 ),所以要自己写。

然后用的话就根据需要,正常操作了。

unordered_map<pair<int,int>,double,pair_hash<int,int>,pair_hash<int,int>> minDis;
   minDis.insert({{1,2}, 1.5});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值