C++ pb_ds库之hash

pb_ds库之hash

最近在做hash的模板题,自己手打的的hash代码长还容易出错。

但STL中有一个pb_ds库,里面的hash函数和手打的hash速度差不多,比STL中的map快多了。

与大家分享一下,不足之处还请各位神犇指出和补充。

本文只是简略地介绍此函数在hash中的应用,若想深入研究,这里有一个:C++的pb-ds库在OI中的应用

网址:https://wenku.baidu.com/view/ffc18b542f60ddccdb38a00d.html?pn=NaN

pb_ds库hash函数需要调用的的头文件:

#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace __gnu_pbds;

函数声明方式:

cc_hash_table<int,bool>h;
gp_hash_table<int,bool>h;

其中所定义的两种数据类型不局限于<int,bool>,<string,bool>,<string,int>都可以。

cc_hash_table是拉链法

gp_hash_table是查探法

查探法要快一些,个人推荐用查探法。

补充:

pb_ds库中的两种hash函数比map的效率大大提高,比起手打hash代码简洁且易于调试。

个人觉得如果追求速度的话个人觉得还是手打hash快一点。

时间: 2024-10-25 00:13:21

C++ pb_ds库之hash的相关文章

c++ pb_ds库,实现 红黑树,Splay

C++ pb_ds库 #include <ext/pb_ds/assoc_container.hpp>#include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; 定义一颗红黑树 tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>t; int 关键字类型 null_type无映射(低版本g++

STL库与pb_ds库简单应用

前者不开O2时谨慎使用! 后者尽量不要用! STL库介绍比较多,其中字符串库用的比较少但也应该记住 http://www.cnblogs.com/rvalue/p/7276883.html http://www.cnblogs.com/rvalue/p/7327293.html pb_ds差别不大,但这两个库最大的缺陷就是几乎无法用gdb调试,只能手工输出 下面这个程序运行出来之后就是个小教程 #include<cstdio> #include<vector> #include&l

ACM-ICPC 中可能会使用到的库

sort(v.first(),v.end(),cmp())unique(v.first(),v.end(),cmp()) 第三个参数可以传入一个bool型,用来判断是不是相等,返回unique后的超尾max_element(v.first(),v.end(),cmp()) 返回一个迭代器max_element(v.first(),v.end(),cmp()) 返回一个迭代器nth_elemtn(v.first(),v.first()+nth,v.end(),cmp()) 对整个容器部分排序后,返

游戏排行榜算法设计实现比较

以前在音乐做过一些实时投票,积分排名:单曲.专辑等排行榜:游戏中也有类似的战斗力排行:SNS的游戏又有好友排行等,对于此类的排行算法在此做个总结. 需求背景: 查看前top N的排名用户 查看自己的排名 用户积分变更后,排名及时更新 方案一: 利用MySQL来实现,存放一张用户积分表user_score,结构如下: 取前top N,自己的排名都可以通过简单的sql语句搞定. 算法简单,利用sql的功能,不需要其他复杂逻辑,对于数据量比较少.性能要求不高,可以使用.但是对于海量数据,性能是无法接受

pbds(平板电视)?

比STL还STL?——平板电视 posted on 2018-08-07 14:08:04 | under 未分类 |  19 __gnu_pbds食用教程 ●QQ826755370 引入 某P党:“你们C++的STL库真恶心强大,好多数据结构和算法都不用手打.” C党1:“STL能省下的代码量又不多,平衡树多难调啊.” C党2:“欸?__gnu_pbds库就可以做到啊,它封装了hash,tree,trie,priority_queue这四种数据结构.” 正文 介绍 什么是__gnu_pbds?

ython——杂货铺

三目运算: >>> 1 if 5>3 else 0 1 >>> 1 if 5<3 else 0 0 深浅拷贝: 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # ######### 数字.字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 赋值 ## n2 = n1 pr

可持久化并查集加强版 BZOJ 3674

http://www.lydsy.com/JudgeOnline/problem.php?id=3674 3674: 可持久化并查集加强版 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 3225  Solved: 1192[Submit][Status][Discuss] Description Description:自从zkysb出了可持久化并查集后--hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了!ndsf:暴力就可

BZOJ 3040: 最短路(road) ( 最短路 )

本来想学一下配对堆的...结果学着学着就偏了... 之前 kpm 写过这道题 , 前面的边不理它都能 AC .. 我也懒得去写前面的加边了... 用 C++ pb_ds 库里的 pairing_heap 水过去的... ---------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #

PHP资源列表

Composer Repositories Composer源 Firegento - Magento模块Composer源 Packagist - PHP包的源 PaketHub - 集成的PHP包的源 Private Packagist - 一个PHP的服务,提供Composer包的存储 WordPress Packagist - 使用Composer管理你的WordPress插件 Zend Framework Packages - Zend Framework Composer源 依赖管理