当前位置: 首页 > news >正文

网站建设犭金手指六六壹柒网站流量如何来

网站建设犭金手指六六壹柒,网站流量如何来,基于h5的移动网站开发,上海网站制作找缘魁W...Y的主页 #x1f60a; 代码仓库分享#x1f495; 前言#xff1a;我们已经认识并实现了哈希底层的逻辑#xff0c;创建出了其开散列。现在我们要进行封装#xff0c;类比STL中的unordered_set 与 unordered_map。 目录 1. 模拟实现 1.1 哈希表的改造 1.2 unorde… W...Y的主页 代码仓库分享  前言我们已经认识并实现了哈希底层的逻辑创建出了其开散列。现在我们要进行封装类比STL中的unordered_set 与 unordered_map。 目录 1. 模拟实现 1.1 哈希表的改造 1.2 unordered_set 与 unordered_map的封装 1. 模拟实现 1.1 哈希表的改造 1. 模板参数列表的改造 unordered_set 与 unordered_map的泛型与map与set的泛型有些类似unordered_set 与 unordered_map比map与set多一个仿函数他们都取key值并且需要一个hash值作为映射点。所以需要两个仿函数。 K:关键码类型 V: 不同容器V的类型不同如果是unordered_mapV代表一个键值对如果是 unordered_set,V 为 K KeyOfValue: 因为V的类型不同通过value取key的方式就不同我们必须使用一个仿函数进行才能实现unordered_map/set。 Hash: 哈希函数仿函数对象类型哈希函数使用除留余数法需要将Key转换为整形数字才能 取模 templateclass K, class V, class KeyOfValue, class Hash DefHashFT class HashBucket; 只有我们调用unordered_set 与 unordered_map时编译器会识别关键字进行操作所以我们定义的仿函数可以使用类部类中 //unodered_set templateclass K, class Hash HashFuncK class unordered_set {struct SetKeyOfT{const K operator()(const K key){return key;}}; public:typedef typename hash_bucket::HashTableK, const K, SetKeyOfT, Hash::iterator iterator; };//unorder_map templateclass K, class V, class Hash HashFuncK class unordered_map {struct MapKeyOfT{const K operator()(const pairK, V kv){return kv.first;}};public:typedef typename hash_bucket::HashTableK, pairconst K, V, MapKeyOfT, Hash::iterator iterator; }; 所以我们HashNode中的泛型应该修改 templateclass T struct HashNode {HashNodeT* _next;T _data;HashNode(const T data):_next(nullptr), _data(data){} }; 2. 增加迭代器操作 我们要实现迭代器的、*、!等等因为HashNode中为单链表所以我们不需要实现--操作。 那我们应该如何实现呢 上图是散列表结构迭代器的底层就是指针所以我们就要使用指针指向桶中的元素。所以我们就要HashNode的指针与HashTable的指针作为迭代器成员。 struct __HTIterator {typedef HashNodeT Node;typedef HashTableK, T, KeyOfT, Hash HT;typedef __HTIteratorK, T, KeyOfT, Hash Self;Node* _node;HT* _ht;__HTIterator(Node* node, HT* ht):_node(node), _ht(ht){} }; begin()与end()函数非常简单begin就找vector中第一个不为空的指针返回其值即可。 iterator begin() {for (size_t i 0; i _tables.size(); i){// 找到第一个桶的第一个节点if (_tables[i]){return iterator(_tables[i], this);}}return end(); } end就是返回空即可 iterator end() {return iterator(nullptr, this); } 其实是最难实现的因为当给予一个指针时我们要桶的下一个节点如果这个桶的所以节点全部走完就要寻找下一个不为空的桶即可。 Self operator() {if (_node-_next){// 当前桶还是节点_node _node-_next;}else{// 当前桶走完了找下一个桶KeyOfT kot;Hash hs;size_t hashi hs(kot(_node-_data)) % _ht-_tables.size();// 找下一个桶hashi;while (hashi _ht-_tables.size()){if (_ht-_tables[hashi]){_node _ht-_tables[hashi];break;}hashi;}// 后面没有桶了if (hashi _ht-_tables.size()){_node nullptr;}}return *this; } 迭代器中剩余函数 bool operator!(const Self s) {return _node ! s._node; }T operator*() {return _node-_data; } 1.2 unordered_set 与 unordered_map的封装 //unordered_set namespace why {templateclass K, class Hash HashFuncKclass unordered_set{struct SetKeyOfT{const K operator()(const K key){return key;}};public:typedef typename hash_bucket::HashTableK, const K, SetKeyOfT, Hash::iterator iterator;iterator begin(){return _ht.begin();}iterator end(){return _ht.end();}bool insert(const K key){return _ht.Insert(key);}private:hash_bucket::HashTableK, const K, SetKeyOfT, Hash _ht;}; //unordered_map namespace why {templateclass K, class V, class Hash HashFuncKclass unordered_map{struct MapKeyOfT{const K operator()(const pairK, V kv){return kv.first;}};public:typedef typename hash_bucket::HashTableK, pairconst K, V, MapKeyOfT, Hash::iterator iterator;iterator begin(){return _ht.begin();}iterator end(){return _ht.end();}bool insert(const pairK, V kv){return _ht.Insert(kv);}private:hash_bucket::HashTableK, pairconst K, V, MapKeyOfT, Hash _ht;}; 以上就是unordered_set 与 unordered_map的封装的全部内容具体代码在我的gitee代码库中想要的可以自行去取
http://www.zqtcl.cn/news/572823/

相关文章:

  • 妇科医院网站优化服务商品牌型网站设计推荐
  • 西安网站制作排名网站建设对企业的帮助
  • lamp网站开发 pdf纯html5 网站
  • 白云区同和网站建设购物网站怎么建立
  • 公司制作网站需要espcms易思企业网站管理系统
  • 开发一个网站需要哪些步骤广西建设主管部门网站
  • 网站建设培训西安制作微信小程序开发
  • delphi 做直播网站wordpress 商务
  • 各大网站的软文怎么做wordpress教程菜鸟教程
  • 破解php网站后台账号密码wordpress二维码 插件下载
  • 石家庄哪里可以做网站做网站用的pm是啥
  • 租服务器网站有趣的设计网站
  • 建设部监理网站官网信阳市两学一做网站
  • 网站被攻击会影响收录么微信网站 影楼
  • 社区网站开发search搜索引擎
  • 章丘做网站哪家强原阳网站建设
  • 做网站前期构架图中国建设银行手机银行网站
  • tp5企业网站开发百度云青岛vi设计公司
  • 网站建设实验原理建站之星 discuz
  • 购物网站如何备案建设部施工合同范本
  • 网站模板安装建站之星凡客
  • 有没有电脑做兼职的网站吗网站和域名区别
  • 免费html网页模板素材网站修改wordpress后台登陆
  • 男女做啊免费视频网站网站做全景图
  • 网站域名 安全网站开发语言一般是用什么
  • 麦包包的网站建设分析网站开发一般要用到哪些软件有哪些
  • 关于内网站建设的请示天津住房与城乡建设厅网站首页
  • 企业网站免费源码装修公司需要多少钱
  • 沈阳建设网站费用群晖wordpress打不开
  • jsp网站开发 pdf建设植绒衣架网站