Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Hashfunc hf
封装unordered_map和unordered_set_小何只露尖尖角的博客-CSDN博客
先前用红黑树封装出了map和set,现在就要用哈希来封装unordered_map和unordered_set(为了简化名称,后面称u_map和u_set),u_map和u_set在学习map时曾了解过,只知道是无序,我还在想,不能排序有啥用呢?原来用于查找数据效率高得很。有了封装map和set的经历,下面的封装就好理解多了,难点基本上都是迭代器和模板参数。 一 模板参数 下图为哈希表接收的模板参数 本文的哈希是开散列的,因为开散列可以更好地解决哈希冲突,所以哈希表中存的就是每个桶中第一个节点的指针,而T就是节点用于存各种数据类型的,也就是说u_map和u_set给哈希表模板传的第二个模板参数就是想要哈希表节点存的类型。接来下看看两个容器在节点存的类型。 节点类内部实现 template<class T>//T为节点所存数据 struct HashNode { HashNode(const T& data) :_data(data) , _next(nullptr) { ; } T _data; HashNode<T>* _next; }; u_map实例化的哈希表变量...
【C++】unordered_map和unordered_set-CSDN博客
在C++11中,STL新增了4个unordered_xxx系列的关联式容器,它们在用法上和红黑树的关联式容器类似。但在查询效率上,unordered_xxx系列略胜一筹。红黑树中的节点非常多时,查询效率也不理想(需要进行多次比较),最坏情况下要比较高度次,unordered_xx系列容器进行很少的比较次数就能够将元素找到。 1. unordered_map unordered_map存储的是pair<key,value>的键值对。 unordered_map的key是唯一的,通过key可以找到对应的value。 unordered_map存储的元素是无序的。 unordered_map的迭代器是单向迭代器(前向迭代器)。 unordered_map支持[]访问,通过key返回value。 构造 容量 迭代器 只有正向迭代器,没有反向迭代器。 元素查找 (1)find (2)count (3)equal_range 插入和删除 哈希桶 []访问 2. unordered_set unordered_set的常见接口和unordered_map的接口一样,这里就不赘述。 3.
【C++】unordered_map与unorder_set的封装(哈希桶)_Satoru_Kaugo的博客-CSDN博客
前言 我们开辟一个指针数组,指针数组中存放我们结点的类型,我们算出元素的下标hashi后,头插在数组的对应位置,数组的位置可以链接一串链表,所以也避免了哈希冲突 一、模板参数的改造 我们这里把pair<K,V>看成一个整体,我们设计模板的时候就不需要考虑是不是键值对类型,需不需要多传一个模板参数的问题,达到了普适性。 template<class T> struct HashNode { T _data; HashNode<T>* _next; HashNode(const T& data) :_data(data), _next(nullptr) {} }; 在map中,T传pair<K,V>类型 在set中,T传K类型 二、模板的特例化操作 我们要想插入一个结点,肯定要知道这个结点插入的位置,所以我们要自己写一个哈希函数的模板来进行下标的计算,但我们int类型之间计算下标很容易,那我们字符串该怎么办? 这个时候就需要模板的特例化了,根据传入的参数不同,具体类型具体分析 template<class K> struct DefaultHashFunc { size_t...
利用哈希表封装unordered_map和unordered_set_高比拜仁0824的博客-CSDN博客
1.1 普通迭代器 对于哈希桶结构,它的迭代器应该如何设计呢?我们仅封装一个Node的指针就行了吗?其实这里是仅用一个指针是不够的,因为在迭代器重载operator++的时候,如果当前位置的链表还没有遍历完,那就是直接_node=_node->_next就行了,但是如果哈希表中当前位置的链表已经遍历完了,那么就要计算当前迭代器是在哈希表中的哪一个位置,然后从哈希表的下一个位置开始遍历找出下一个不为空的_node,这个_node构造的迭代器就是iterator++的结果,所以现在的问题是我们要知道当前迭代器在哪一个桶,就要知道这个哈希表的size,然后用_node->_data的key%size得到的余数才是当前的位置,但是_node节点中并没有size呀,所以我们选择把哈希表的指针传过来,有这个表的指针就什么数据都有啦! 所以迭代器应该有一个Node和一个HashTable*构成。 代码实现: Self& operator++() { KeyOfT kot; HashFunc hf; Node* cur = _node; if (_node && _node->_next) {...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Hashfunc
Contact Hashfunc, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack