C++ unordered_map无法使用pair作为key的解决办法

   日期:2020-05-03     浏览:354    评论:0    
核心提示:最近在使用STL中unordered_map这种容器的时候发现无法将key设置为pair类型,编译报c/c++

最近在使用STL中unordered_map这种容器的时候发现无法将key设置为pair类型,编译报错信息为:

error: implicit instantiation of undefined template 'std::__1::hash<std::__1::pair<int, int> >

查了下资料才发现unordered_map中没有针对pair的hash函数,需要手动传入一个hash函数。hash函数的一种简单实现如下:

struct hash_pair { 
    template <class T1, class T2> 
    size_t operator()(const pair<T1, T2>& p) const
    { 
        auto hash1 = hash<T1>{}(p.first); 
        auto hash2 = hash<T2>{}(p.second); 
        return hash1 ^ hash2; 
    } 
}; 

接下来把这个hash函数传给unordered_map就OK了!

unordered_map<pair<int,int>, int, hash_pair> um;

因为map容器并不需要hash函数,所以将key设置为pair是不会报错的。在数据量不大的情况下,也可以考虑使用map替代unordered_map,性能并不会有太大差异。

 
标签: 文章标签: c++ stl
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服