首页 > 其他分享 >cpp hash

cpp hash

时间:2024-05-17 19:41:32浏览次数:16  
标签:std set hash key 哈希 有序 cpp

一般哈希表都是用来快速判断一个元素是否出现集合里 。 比如找到一个学生,在不在队列里,这种查找问题,使用 hash 表,可以快速执行。

hash 函数 :用于将需要填充的值或者索引,映射到hash table 的索引上。
哈希碰撞 : 如果 两个事物的 hash value 相同, 则出现hash 碰撞。一般哈希碰撞有两种解决方法, 拉链法和线性探测法。
常见hash结构 : 数组,set,map

c++ 同的 hash 结构 :

集合 底层实现 是否有序 数值是否可以重复 能否更改数值 查询效率 增删效率
std::set 红黑树 有序 O(log n) O(log n)
std::multiset 红黑树 有序 O(logn) O(logn)
std::unordered_set 哈希表 无序 O(1) O(1)
set 和 multiset 的key是有序的,不能修改
映射 底层实现 是否有序 数值是否可以重复 能否更改数值 查询效率 增删效率
std::map 红黑树 key有序 key不可重复 key不可修改 O(logn) O(logn)
std::multimap 红黑树 key有序 key可重复 key不可修改 O(log n) O(log n)
std::unordered_map 哈希表 key无序 key不可重复 key不可修改 O(1) O(1)
map 同理

当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。

三数之和

剪枝操作:

num[i] == num[i+1] --> continue //结果集中不能又相同的值
num[i-1] == num[i] --> continue //开头两个字母重复,---> 此状态出现过,无需再次运算

i 确定了 ,剩下两个同理

标签:std,set,hash,key,哈希,有序,cpp
From: https://www.cnblogs.com/bigsharker/p/18198476

相关文章

  • hashMap寻址算法
    hashMap寻址算法计算对象的hashCode()。再进行调用hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀。最后(capacity-1)&hash得到索引。为何HashMap的数组长度一定是2的次幂计算索引时效率更高:如果是2的n次幂可以使用位与运算代替取模。扩容时......
  • HashMap扩容原理
    在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度*0.75)。每次扩容的时候,都是扩容之前容量的2倍。扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中。没有hash冲突的节点,则直......
  • HashMap put流程
    判断键值对数组table是否为空或为null,否则执行resize()进行扩容(初始化)。根据键值key计算hash值得到数组索引。判断table[i]==null,条件成立,直接新建节点添加。如果table[i]==null,不成立判断table[i]的首个元素是否和key一样,如果相同直接覆盖value判断table[i]是否为treeNo......
  • HashMap原理
    HashMap的实现原理底层使用hash表数据结构,即数组+(链表|红黑树)。添加数据时,计算key的值确定元素在数组中的下标,key相同则替换,不同则存入链表或红黑树中。获取数据通过key的hash计算数组下标获取元素。HashMap的JDK1.7和JDK1.8有什么区别JDK1.8之前采用的拉链法,数组+链表。J......
  • 【java】【集合类】HashMap之扩容原理
    一、什么是HashMap?HashMap数据结构为数组+链表(JDk1.7),JDK1.8中增加了红黑树,其中:链表的节点存储的是一个Entry对象,每个Entry对象存储四个属性(hash,key,value,next)二、为什么要使用HashMap?对于要求查询次数特别多,查询效率比较高同时插入和删除的次数比较少的情况下,通常会选择Arra......
  • ROS学习日记:(报错)terminate called after throwing an instance of 'rclcpp::excepti
    论坛里的一个老哥给出答案https://discourse.ros.org/t/how-to-shutdown-and-reinitialize-a-publisher-node-in-ros-2/4090就是我在初始化环境前先初始化了节点autonode=std::make_shared<Static_tf_broadcaster>(argv);rclcpp::init(argc,argv);rclcpp::spin(nod......
  • hashCode()与equals()之间的关系
    在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。理解这两者的关系对于写出高效、正确的Java代码至关重要。 hashCode()目的:`hashCode()`方法用于返回对象的哈希码值,这是......
  • hashCode()与equals()之间的关系
    在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。理解这两者的关系对于写出高效、正确的Java代码至关重要。 hashCode()目的:`hashCode()`方法用于返回对象的哈希码值,这是......
  • Flink Batch Hash Aggregate
    数据类型要求BatchPhysicalHashAggRulematch条件会判断isAggBufferFixedLength(agg)为什么要求aggCall的类型是FixedLength的才可以使用HashAggregate?因为在HashAggregate中,依赖于BytesHashMap数据结构来存储keyValue数据.而ByteHashMap不支持变长的val......
  • PLY文件格式及cpp解析
    PLY(PolygonFileFormat,多边形文件格式)文件用于存储GeometryObjectData(包括vertices,faceandotherelement顶点/面片/其它属性)文件格式:HeaderVertexListFaceList(listsofotherelements)Header:以ply开始,以end_header结束第二行format指定是文本格式(A......