对于一些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(, "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%;
}
};
对于一些stl自定义比较函数的更多相关文章
- oracle 自定义比较函数
1>自定义比较函数,targetVal的值为字符串,例如:“>=90”,"2~8"等范围格式,dataVal值为字符串. create or replace funct ...
- 【C++】自定义比较函数小结
1.使用结构体grid作为map的key struct grid { int x; int y; }; (1)需要自定义比较函数operator<,不然会报错: error C2784: “bo ...
- STL中sort、priority_queue、map、set的自定义比较函数
STL中,sort的默认排序为less,也就是说从小到大排序:priority_queue默认是less,也就说大顶堆:map默认是less,也就说用迭代器迭代的时候默认是小的排在前面:set默认是l ...
- STL注意比较函数
可重复插入?: set<int ,less_equal<int> >s; s.insert(10); s.insert(10); 第二次调用insert,集合回去确认10是否已 ...
- 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...
- 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- STL传递比较函数进容器的三种方式
对于STL中的依靠比较排序的容器,均提供了一个模板参数来传递比较函数,默认的为std::less<>. 查阅Containers - C++ Reference可以看到典型的使用比较函数的 ...
- 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- stl 自定义排序与删除重复元素
转: STL—vector删除重复元素 STL提供了很多实用的算法,这里主要讲解sort和unique算法. 删除重复元素,首先将vector排序. sort( vecSrc.begin(), vec ...
随机推荐
- ECMAScript基本语法——⑦js特殊的语法
定义方法 无法弹出因为是局部变量 可以弹出因为是全局变量 这样写可读性比上面的高
- 一些PC小软件/工具/神器备份
小巧.有用的工具,提升工作效率. 以下所有软件均在吾爱破解可以找到(善用搜索) everything(本机文件搜索神器) 天若OCR文字识别(强无敌) QQ拼音截屏工具(从QQ拼音/QQ中独立拿出来的 ...
- Sql注入之注入点类型和是否存在注入判断
SQL注入之判断注入类型注入类型分为数字型和字符型和搜索型例如数字型语句:select * from table where id =3,则字符型如下:select * from table wher ...
- .gitignore文件说明-git提交时可忽略的文件
在我们平时做项目时,总有一些文件不想提交到服务器的版本管理上 这时就要设置相应的忽略规则,来忽略这些文件的提交 规则 作用/mtk 过滤整个文件夹*.zip 过滤所有.zip文件/mtk/do.c 过 ...
- day06_类与对象、封装、构造方法
02_面向对象与常用类 01_面向对象思想的概述 面向过程:当需要实现一个功能的时候,每个具体的步骤都需要亲力亲为,详细处理每一个细节. 面向对象:当需要实现一个功能的时候,不关心具体步骤,而是找一个 ...
- springboot之json传参(后台控制层如何接收和解析参数)
一般web端都是用form标签的形式进行表单提交到后台,后台控制层再用相应的实体对象去接收前端传来的json参数. 但是有时候前端界面很复杂,要传入后端的参数是各种标签里面的value值,这些值又是来 ...
- word中去除所有table键
1.打开word---文件---选项---显示,不勾选制表符 2.选择需要的文本,按[CTRL+H]查找替换, 3.将鼠标定位至“查找内容”,点击“特殊格式-制表符”,然后出现^t,在“替换为”中输入 ...
- 实现ENSP模拟器与物理主机、虚拟机通信
一.环境描述 我需要实现华为模拟器中的网络设备和物理主机.虚拟机通信.这篇文章中以ENSP中的路由器为例,实现它和物理主机.虚拟机的通信. 二.实现方法 在ENSP中借助Cloud来实现. 在Clo ...
- A conflict in the working copy obstructs the current operation
svn: Commit failed (details follow): svn: Aborting commit: 'G:\chengXu\2017_Year\Easy7视频结构化\UploadFi ...
- 普通平衡树 lg3369
在多次学习splay后,我终于理解并码出了整份代码 参考了https://tiger0132.blog.luogu.org/slay-notes的博客 具体实现原理在上面这篇博客和百度中可以查到,接下 ...