文章 2023-06-15 来自:开发者社区

C++STL——哈希(下)

其他哈希函数平方取中法假设关键字为1234,对它平方就是1522756,抽取中间的3位227作为哈希地址;再比如关键字为4321,对它平方就是18671041,抽取中间的3位671(或710)作为哈希地址。平方取中法比较适合:不知道关键字的分布,而位数又不是很大的情况。折叠法折叠法是将关键字从左到右...

C++STL——哈希(下)
文章 2023-06-15 来自:开发者社区

C++STL——哈希(中)

开散列——哈希桶这里就是数组是要给指针数组,数组里面存放单链表的地址,将冲突的值放在单链表里面就可以了。但是如果某一个位置冲突很多,挂了很长,那么效率也会下降。不过这里下面不一定能非要挂单链表,也可以挂红黑树等等。哈希桶的实现首先表中类型需要更改,并且负载因子等于1才会进行扩容。如果当前位置没有任何值就是空,如果...

C++STL——哈希(中)
文章 2023-06-15 来自:开发者社区

C++STL——哈希(上)

unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到l o g 2 N log_2Nlog2N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,...

C++STL——哈希(上)
文章 2023-06-15 来自:开发者社区

C++STL——map与set的模拟实现(下)

完整代码RBTree.h#include<iostream> #include<cassert> using namespace std; enum Color//利用枚举来给红黑树配色 { RED, BLACK }; template<class T> struct RBTreeNode { RBTreeNode(const T&am...

文章 2023-06-15 来自:开发者社区

C++STL——map与set的模拟实现(中)

如果是it在15结点这个位置,往上走没有遇到符合祖先的位置,并且已经走到空了,那就代表已经结束了。Self& operator++() { if (_node->_right)//右子树不为空 { Node* cur = _node->_right...

C++STL——map与set的模拟实现(中)
文章 2023-06-15 来自:开发者社区

C++STL——map与set的模拟实现(上)

map与set的部分源码参考map和set的底层都是由红黑树实现的。所以这里将上次实现的红黑树插入拿来用。首先想一想,搜索二叉树不能修改值,因为会破坏整棵树的平衡。set与map的部分源码:class set { public: // typedefs: typedef Key key_type; typedef Key value_type...

C++STL——map与set的模拟实现(上)
文章 2023-06-15 来自:开发者社区

C++STL——map与set介绍及使用

map与set介绍及使用关联式容器健值对setmultisetmapmultimap关联式容器之前我们学的list,vector等等是序列式容器,这里的set和map和之后的哈希表都是关联式容器,比如说搜索二叉树我们想插入一个值,不能随意的插入,因为每个数都是有关联的,需要找到准确位置才能进行插入。健值对用来表示...

C++STL——map与set介绍及使用
文章 2023-06-15 来自:开发者社区

C++STL——stack与queue

stack与queue这两个就是之前数据结构学过的栈和队列,只不过多了几个接口。stack:queue:这两个容器没有迭代器,这是因为怕我们更改导致顺序错误。#include<iostream> #include<stack> #include<queue> int main() { stack&...

C++STL——stack与queue
文章 2023-06-15 来自:开发者社区

C++STL——list类与模拟实现

listlist是一个带头双向循环链表。list文档介绍:https://legacy.cplusplus.com/reference/list/list/list因为是链表结构,所以没有 [] 去访问数据的方式,只有用迭代器,list当中迭代器是很重要的。这里透彻尾插不会导致迭代器失效问题,不过删除会导致迭代器失效。list...

C++STL——list类与模拟实现
文章 2023-06-15 来自:开发者社区

C++STL——vector类与模拟实现(下)

当扩容之后我们发现,vector的成员变量地址都变了,但是pos指向的还是原来的位置,导致pos指向的内容也就变成了我们上面看到的随机值。这就是扩容需要重新开辟一块空间并且释放掉原来的空间导致的迭代器失效问题。我们传过来的参数pos是没有重新分配空间的地址,那么在扩容时失效应该如何避免呢?这里只需要记录原来pos与_start...

C++STL——vector类与模拟实现(下)

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

开发与运维

集结各类场景实战经验,助你开发运维畅行无忧

+关注