首页 > 编程语言 >有关C++哈希函数的常用形式,具体解释见注释

有关C++哈希函数的常用形式,具体解释见注释

时间:2023-08-17 16:57:11浏览次数:28  
标签:hash template val C++ 注释 seed 哈希 const size

#pragma once
#include<unordered_set>
#include<unordered_map>
namespace hash_function {
	//将参数传入
	template<typename... Types>
	inline size_t hash_val(const Types&...args) {
		size_t seed = 0;
		hash_val(seed, args...);
		return seed;
	}
	//将参数进行分解
	template<typename T, typename... Types>
	inline void hash_val(size_t& seed, const T& val, const  const Types&...args) {
		hash_combine(seed, val);
		hash_val(seed, args...);
		return seed;
	}
	//函数递归的出口,即参数最终分解为一个
	template<typename T>
	inline void hash_val(size_t& seed, const T& val) {
		hash_combine(seed, val);
	}
	//计算对应的哈希码
	template<typename T>
	inline void hash_combine(size_t& seed, const T& val) {
		seed ^= std::hash<T>(val) + 0x9e3779b9 + (seed << 9) + (seed >> 2);
	}
}

  

标签:hash,template,val,C++,注释,seed,哈希,const,size
From: https://www.cnblogs.com/Mexcellent/p/17638102.html

相关文章

  • 9.1 C++ STL 排序、算数与集合
    C++STL(StandardTemplateLibrary)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。STL提供的这些算法,能够满足各种数据处理和分析的需求......
  • 10.1 C++ STL 模板适配与迭代器
    STL(StandardTemplateLibrary)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效、灵活和方便的编程工具。模板适配器是指一组模板类或函数,它们提供一种适配机制,使得现有的模板能够适应新的需求。而迭代器则是STL中的令一种重要的概念,它是一个抽象化的数据访问机制,......
  • 11.1 C++ STL 应用字典与列表
    C++STL标准模板库提供了丰富的容器和算法,这些模板可以灵活组合使用,以满足不同场景下的需求。本章内容将对前面学习的知识进行总结,并重点讲解如何灵活使用STL中的vector和map容器,以及如何结合不同的算法进行组合。通过灵活组合使用这些容器和算法,能够满足不同场景下的需求,实现高......
  • 9.1 C++ STL 排序、算数与集合
    C++STL(StandardTemplateLibrary)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。STL提供的这些算法,能够满足各种数据处理和分析的需......
  • 11.1 C++ STL 应用字典与列表
    C++STL标准模板库提供了丰富的容器和算法,这些模板可以灵活组合使用,以满足不同场景下的需求。本章内容将对前面学习的知识进行总结,并重点讲解如何灵活使用STL中的vector和map容器,以及如何结合不同的算法进行组合。通过灵活组合使用这些容器和算法,能够满足不同场景下的需求,实现高......
  • C++黑马程序员——P231-235. map容器
    P231.map容器-构造和赋值P232....-大小和交换P233....-插入和删除P234....-查找和统计P235....-排序P231.构造和赋值  ——————————————————————————————————————————————————————————构造:map<T1,T2>......
  • C++之右值引用与完美转发与可变参数模板(万字长文详解)
    C++之右值引用与完美转发与可变参数模板左值引用和右值引用的概念​ 传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。那么到底什么是左值什么是右值呢?难道说赋......
  • windows下C++获取其它窗口中组件的信息
    抄自:https://pythonjishu.com/xfqbhrlejawmdfh/C++获得其他程序窗体控件中信息是一个比较常见的需求,例如在自动化测试、窗口助手等场景下都有可能用到。下面我们就介绍一下C++获得其他程序窗体控件中信息的方法。安装VisualStudio获得其他程序窗体控件中信息,在Windows下通过Wi......
  • C++11的新特性
    2.1.1longlong类型除字符和布尔类型外,其他整形用于表示不同尺寸的整形,一个longlong至少和一个long一样大,其中,数据类型longlong是在C++11中新定义的2.2.1列表初始化 ......
  • 漫谈 C++ 的各种检查
    原文:《漫谈C++的各种检查》为什么代码中需要各种检查?在C++中调用一个函数、使用一个类、实例化一个模板时,对传入的参数、使用的时机,往往会有很多 限制 (constraint/restriction)(例如,数值参数不能传入负数、对象的访问不是线程安全的、函数调用不能重入);而处理限制的方法有很......