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(, "bob");
mmp[myuin] = true; cout << mmp[myuin] << endl;
return ;
}

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

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

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

priority_queue<comp> pq;

struct comp {
int x;
bool operator < (const comp& n) const {
if(x % == n.x % ) return x < n.x;
return x% < n.x%;
}
};

最新文章

  1. Hadoop的学习--安装配置与使用
  2. stickUp让页面元素“固定”位置
  3. WCF x509证书安装问题汇总
  4. 【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP
  5. Windows Maven package时报错问题的解决
  6. HtmlAgilityPack下载开启压缩的页面乱码
  7. C2第六次作业解题报告
  8. mysql慢查询优化之explain的各列含义
  9. Ubuntu phpmyadmin 缺少mcrypt扩展解决方法
  10. max Sum(简单动态规划)
  11. file控件change事件触发问题
  12. Unix/Linux环境C编程入门教程(36) 初识shell
  13. css3属性——border-radius用法
  14. 解决IIS7 HTTP/405 Method Not Allowed 问题的方法.
  15. qmake 小结(Qt 5.4)
  16. HDU 5531 Rebuild
  17. python is not None
  18. CF数据结构练习(二)
  19. c# 公元转农历
  20. 修改云主机windows密码不生效

热门文章

  1. 【剑指Offer】39:平衡二叉树
  2. python实用30个小技巧
  3. ansible笔记(14):循环(一)
  4. requests-验证码登录
  5. [TJOI2007] 路标设置 - 二分答案,贪心
  6. 配置maven时,报JAVA_HOME错误
  7. Jmeter-文件目录
  8. Python-selenium,使用SenKey模块时所碰到的坑
  9. 汉语诗词 LaTeX 排版样式
  10. BigInteger和BigDecimal的基本用法