首页 > 其他分享 >关于自定义unordered_set\unordered_map中Hash和KeyEqual:函数对象和lambda表达式简单应用

关于自定义unordered_set\unordered_map中Hash和KeyEqual:函数对象和lambda表达式简单应用

时间:2024-07-03 19:30:48浏览次数:19  
标签:map set const 自定义 KeyEqual vec2 vec1 unordered

unordered_set为例,首先在cppreference中查看其模板定义:
image
可以看到Hash类默认是std::hash<KeyKeyEqual类似,本文将Hash以函数对象写出,将KeyEqual以lambda写出。

class hashvec{
	public:
	size_t operator()(const vector<int> & vec) const {
	return hash<int>()(vec[0]) + hash<int>()(vec[1]) + hash<int>()(vec[2]);
	}
};
int main() {
	unordered_set<vector<int>, hashvec, decltype([](const vector<int>& vec1,const vector<int>& vec2) -> bool{
			if (vec1[0] == vec2[0] && vec1[1] == vec2[1] && vec1[2] == vec2[2]) {
                return true;
            }
            return false;
        })> tmpres;
}

如上图,定义了一个unrodered_set,要注意的是:

  • 函数对象类hashvec中,重载的()运算符是一个const函数
  • undordered_set中的KeyEqual接收一个类,因此需要用decltype推断lambda的类型

标签:map,set,const,自定义,KeyEqual,vec2,vec1,unordered
From: https://www.cnblogs.com/San-Francisco/p/18282430

相关文章

  • 调用自定义模块出现ModuleNotFoundError
    产生问题的原因:IDE(pycharm)没有将自定义模块所在目录添加到工作目录中,导致在搜索目录中找不到要调用的模块。Python会在以下路径中搜索它想要寻找的模块:程序所在的文件夹标准库的安装路径操作系统环境变量PYTHONPATH所包含的路径解决方法1:在调用自定义模块前先将自定义模块/......
  • CC1-LazyMap利用链分析
    分析下ysoserial中CC1的利用链分析版本CommonsCollections3.1JDK8u65环境配置参考JAVA安全初探(三):CC1链全分析分析过程与TransformerMap的CC1不同的是,在寻找InvokeTransformer.transform的方法调用时,我们选择LazyMap的get方法。publicObjectget(Objectke......
  • 高效存储的秘诀:bitmap 数据结构在标签中的应用
    在当今大数据和信息爆炸的时代,如何有效地管理和查询海量的数据成为了企业和开发者面临的重大挑战。其中,标签系统作为数据管理中的一种重要手段,被广泛应用于用户画像、商品分类、内容推荐等多个场景。然而,随着标签数量的急剧增加,传统的数据存储和查询方式已难以满足高效率、低延迟......
  • 企业微信hook,自定义工具,收发消息
    协议版本示例:    企业微信协议开发,配置服务器开启服务端,接口开发企业微信协议接口开发,接收发送json数据即可;接口调用:http请求      接下来拿uuid去调用其他接口即可例:发送位置      请求方式POSTContentType:”application/jso......
  • Django 自定义用户表
    当默认的用户表中字段不足以满足我们的业务需求时,可以自己继承和重写用户表,增加想要的字段。1.自定义用户表模型fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportAbstractUser#重新定义用户表classUserProfile(AbstractUser):avatar=model......
  • 01 | 为什么MapReduce会被硅谷一线公司淘汰?
    今天我要与你分享的主题是“为什么MapReduce会被硅谷一线公司淘汰”。我有幸几次与来Google参观的同行进行交流,当谈起数据处理技术时,他们总是试图打探MapReduce方面的经验。这一点让我颇感惊讶,因为在硅谷,早已没有人去谈论MapReduce了。今天这一讲,我们就来聊聊为什么......
  • Java中semaphore的具体解释产生原因和使用场景
    Semaphore(信号量)信号量(Semaphore)是一种用于控制多个线程对共享资源访问的同步机制。它实质上是一个计数器,可以用来限制能够访问某些资源的线程数量。信号量可以是二进制的(只允许一个线程访问)或计数的(允许多个线程访问,具体数目由信号量的值决定)。信号量产生的原因信号量最......
  • 从零开始带你上手体验Sermant自定义插件开发
    本文分享自华为云社区《Sermant自定义插件开发上手体验》,作者:华为云开源。一、研究缘由由于目前我们所处的行业是汽车行业,项目上进行云服务的迁移时使用到了Sermant中的相关插件,为了加深对Sermant开发和运行机制的了解,我们从零开始体验Sermant自定义插件的开发。下面我们就Se......
  • MyBatis2(MyBatis基础配置 动态代理 映射器 select 元素 insert 元素 update 元素和del
    目录一、MyBatis基础配置1.MyBatis配置文件2.<configuration>元素3.<enviroments>元素4.<properties>元素5.<typeAliases>元素6.<mappers>元素二、动态代理三、映射器1.映射器与接口2. 映射器的引入 3.映射器的组成 四、select元素参数传递多......
  • 自定义ORM框架
    手撕ORM框架1.创建Maven工程2.导入依赖<dependencies><!--引入jdbc的依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><versi......