- 博客(14)
- 收藏
- 关注
原创 位图与布隆过滤器
在前面两个章节中我们详细讲解了哈希表的实现,今天我们就来看一看哈希的应用,也就是位图与布隆过滤器。我将与题目相结合来分别实现这两种应用。
2025-05-25 14:16:29
816
原创 unordered_set与unordered_map实现详解剖析
本文主要介绍了基于哈希表封装unordered_set和unordered_map的实现方法。通过引入KeyOfT模板参数,使用仿函数统一处理不同类型的数据结构。重点讲解了迭代器的实现,包括模板参数设计、const修饰处理、operator++运算符重载等关键细节。同时给出了unordered_set和unordered_map的具体实现,其中unordered_map特别实现了operator[]功能以提供便捷访问。两种容器都通过哈希表底层的Insert、Find、Erase等核心接口实现各自功能,体现了
2025-05-24 17:08:55
859
原创 哈希表的实现(下)
本文介绍了哈希表的开散列实现方法。开散列法通过链表解决哈希冲突,相比闭散列法具有更好的空间利用率。文章详细讲解了开散列的数据结构设计,包括节点定义和哈希表类实现,重点分析了插入操作的两种实现方式及其性能差异。此外,还探讨了字符串键值的哈希函数优化,以及查找和删除操作的实现细节。开散列法通过链地址法有效解决了哈希冲突问题,提高了哈希表的整体性能。
2025-05-24 13:07:22
1120
原创 哈希表的实现(上)
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,分别是unordered_map、unordered_set和unordered_multimap、unordered_multiset。
2025-05-23 23:26:16
1268
原创 AVL树和红黑树(下)
本文介绍了如何通过泛型编程思想封装C++中的map和set,底层使用红黑树实现。首先,通过模板参数设计红黑树,使其能够同时支持map和set。接着,实现了迭代器__TreeIterator,并重载了++、--、*和->等操作符,确保迭代器能够正确遍历红黑树。map和set的封装主要通过调用红黑树的Insert方法实现,map还额外实现了[]操作符,方便插入和修改数据。最后,红黑树的Insert方法通过模板参数KeyOfV区分map和set的键值比较逻辑,确保插入操作的正确性。
2025-05-20 21:39:37
1265
原创 AVL树和红黑树(中)
上一章节中,我们介绍了AVL的一些功能,这节我们主要学习一下红黑树的实现。定义红黑树是一种自平衡的二叉搜索树,它通过一系列规则来维持平衡,而不是像AVL树那样追求严格的平衡。每个节点不是红色就是黑色。根节点是黑色的。如果一个节点是红色的,则它的两个子节点必须是黑色的。对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。每个叶子节点(空节点)都是黑色的。特性近似平衡:红黑树不追求严格的平衡,而是通过上述规则确保树的近似平衡。
2025-05-19 20:19:34
1347
原创 指针的诱惑(上)
我们来看b这个变量,他是int类型的,需要开辟四个字节的空间,我们的pc他是char*类型的,为了能让他存储b的地址,所以我们手动强制类型转换,就是在&b前面加上(char*)。通过打印和监视,我们可以知道a这个变量的地址,int类型的变量大小是四个字节,也就是需要向内存申请四个字节的空间,那么所得到的地址就是内存相对来说较小的地址。我们可以发现,通过a改变它的值和通过*p改变它的值效果是一样的,那我们就能知道,一般情况下如果给出一个变量的地址 ,那我们就可以通过*符号来改变它的值。大家可以自己试一下。
2024-03-30 23:35:02
1046
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人