![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 65
c++
小宁n
这个作者很懒,什么都没留下…
展开
-
哈希切分
此时要分为两种情况,如果子文件中冲突的IP大多是不相同的IP,那么map是会统计不下的,此时就需要我们换个字符串hashfunc,递归哈希切分这个子文件,可以改变一下哈希函数中除留余数法,模的大小,但除留余数法还是挺好用的,如果你觉得不太好用,你也可以尝试其他的哈希函数,我个人推荐继续使用除留余数法,改变一下模的大小,再换个hashfunc,重新建立映射关系,递归将这个子文件进行哈希切分,直到map能够统计这个子文件中的IP内容为止。所以这样的方式也是不行的。如果哈希切分后的单个子文件还是太大该怎么办呢?原创 2024-02-16 01:53:45 · 756 阅读 · 1 评论 -
布隆过滤器
相同的query,是一定进入相同编号的小文件,再对这些文件放进内存的两个set中,编号相同的Ai和Bi小文件找交集即可。我们可以采用三种字符串转化方法对字符串进行转化分别存储在位图当中,通过对三个位置的判断来进行对数据的判断。当我们进行对海量字符串进行查找时,我们单纯采用位图法可能存在冲突,无法解决,这时我们可以使用布隆过滤器。近似算法:利用布隆过滤器,交集的就一定会进去,但是可能会存在误判:不同的也会进去,这是近似。精准算法:query一般是查询指令,比如可能是网络请求,或者是一个数据库sql语句。原创 2024-02-16 01:36:23 · 301 阅读 · 0 评论 -
位图
如果出现海量数据判断数据在不在问题,我们用哈希表无法解决,我们可以利用哈希思想来创建一个新的stl容器,用bit位上的0或1来表示数据存在与否的哈希表。我们向让bit位这个位变成0,可以用这个int数据与(1左移之后值先进行按位取反是那一位变为0,其他区全为1)再进行按位与赋值。我们向让bit位这个位变成1,可以用这个int数据与(1左移之后值那一位变为1,其他区全为0)之后进行按位或赋值。我们测试这个bit位是否为1,可以之间用这个int数据与(1左移之后值那一位变为1,其他区全为0)相与。原创 2024-02-15 01:49:49 · 746 阅读 · 0 评论 -
二叉搜索树基本概念与实现
搜索二叉树的中序遍历是升序。原创 2023-12-12 23:37:52 · 379 阅读 · 0 评论 -
list模拟实现
【代码】list模拟实现。原创 2023-11-29 09:29:48 · 598 阅读 · 0 评论 -
list简单使用
双向循环链表。原创 2023-11-29 08:49:44 · 409 阅读 · 0 评论 -
priority_queue模拟实现
仿函数的通俗定义:仿函数(functor)又称为函数对象(function object)是一个能行使函数功能。仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重operator()原创 2023-11-27 21:53:12 · 478 阅读 · 0 评论 -
priority_queue优先级队列基本使用
类似于堆。原创 2023-11-27 21:19:34 · 617 阅读 · 0 评论 -
stack和queue的模拟实现
适配器就是接口,对容器、迭代器、算法进行包装,但其实质还是容器、迭代器和算法,只是不依赖于具体的标准容器、迭代器和算法类型。概念源于设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的类,可以一起运作。容器适配器可以理解为容器的模板,迭代器适配器可理解为迭代器的模板,算法适配器可理解为算法的模板。原创 2023-11-27 19:25:54 · 791 阅读 · 0 评论 -
stack和queue
栈 先进后出队列,先进先出。原创 2023-11-24 20:03:03 · 454 阅读 · 0 评论 -
Vector的简单使用
1.vector是STL容器中的一种常用的容器,和数组类似,由于其大小(size)可变,常用于数组大小不可知的情况下来替代数组2.vector是为了实现而产生的容器,然而这个名字是STL编写者取名没区好,因为在数学上的向量在几何中是矢量,两者名字相同而意义大相径庭3.vector也是一种顺序容器,在内存中连续排列,因此可以通过下标快速访问,时间复杂度为O(1)。然而,连续排列也意味着大小固定,数据超过vector的预定值时vector将自动扩容。原创 2023-11-21 00:36:43 · 106 阅读 · 0 评论 -
string类的模拟实现
(现代写法):需要引入swap函数改变指针指向。原创 2023-11-17 13:18:47 · 61 阅读 · 0 评论 -
string的简单操作
string是一个字符序列的类。原创 2023-11-15 23:41:38 · 101 阅读 · 0 评论 -
模板初阶 C++
函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具,所以模板就是把原本我们需要做的的事情交给了编译器。类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化结果才是真正的类。在编译器编译阶段,对于函数模板的使用,编译器需要根据传入的实参类型来推演生成对应的函数以供调用。1.函数重载仅仅是类型不同,代码复用率较低,只要出现新类型时,就需要用户增加对应的函数。如果模板可以产生一个具有更好匹配的函数, 那么将选择模板。原创 2023-11-12 12:01:35 · 227 阅读 · 0 评论 -
内存管理
注意:与malloc/free不同的是,new/delete在对于自定义类型开空间的同时还会调用构造函数和析构函数opeartor new也是malloc来申请空间,如果成功申请就直接返回,否则执行用户提供的空间不足的应对措施,如果用户提供措施就继续执行,否则就抛异常(try catch函数)operator delete最终也是通过free来释放空间。原创 2023-11-10 13:47:45 · 380 阅读 · 0 评论 -
类和对象 下
构造函数是在构造类的时候给对象赋初值,并不是给类的成员函数初始化,赋值可以赋多次,而初始化只能初始化一次,这里我们引入初始化列表来对成员函数进行初始化初始化列表,以冒号 :开始,接着以逗号 ,分隔开的成员列表,每个成员后面跟着一个放在括号中的初始值或者表达式注意:1.每个成员变量在初始化列表中只能出现一次2.类中包含引用成员变量const成员变量自定义类型成员变量(且该类没有默认构造时),必须放在初始化列表初始化3.尽量使用初始化列表初始化。原创 2023-11-05 16:09:01 · 124 阅读 · 0 评论 -
日期类函数实现
【代码】日期类函数实现。原创 2023-11-01 20:49:47 · 73 阅读 · 1 评论 -
类和对象 中
一旦涉及到资源申请时,一定要写拷贝构造函数,否则就是浅拷贝,例入栈,如果不写拷贝构造,拷贝出来的栈还在用之前的空间。构造函数是一个特殊的成员函数,名字与类名相同,在创建类类型对象时由编译器自动调用,以保证每个成员函数都有一个合适的初始值,并且在对象整个生命周期只调用一次。3.若未显式定义,编译器会生成默认的拷贝构造函数,按内存储存按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。3.一个类只能有一个析构函数,若未显式定义,系统会自动生成默认的析构函数,析构函数不能重载。一旦涉及到资源管理则必。原创 2023-10-29 23:28:44 · 73 阅读 · 0 评论 -
类和对象【上】
在C语言中结构体只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数,在C++中,更喜欢用class来代替一种是是声明和定义全放在类里面如果成员函数定义在类中,编译器会将其当作内联函数处理另一种是类的声明放在.h文件这种,类的定义放在.c文件中(需要注意,成员函数名前需要加类名::.h文件.c文件。原创 2023-10-28 23:29:59 · 113 阅读 · 1 评论