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 KeyOfT kot
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构--红黑树-CSDN博客
目录 1 -> 红黑树 红黑树,是一种二叉搜索树,但在每个节点上增加了一个存储位表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。 每个节点不是红色就是黑色。 根节点是黑色的。 如果一个节点是红色的,则它的两个孩子节点是黑色的。 对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。 每个叶子节点都是黑色的(此处的叶子节点指空节点)。 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; // 节点的颜色 enum Color { RED, BLACK }; // 红黑树节点的定义 template<class ValueType> struct RBTreeNode { RBTreeNode(const ValueType& data = ValueType(),Color color = RED) : _pLeft(nullptr),...
【C++】unordered系列容器的封装-CSDN博客
你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 1 unordered_map 和 unordered_set unordered系列的库是以哈希桶为底层的容器,其是用来快速寻找指定数据。这里主要介绍unordered_map和unordered_set。 unordered_map unordered_map是用来储存 <key , value>键值对的容器,可以通过Key快速寻找到其对应的value,注意Key和value的类型可以不一样。并且key不可更改,value可以更改! unordered_map内部并不是按照特定顺序储存的,而是按照key转换得到的数组下标来进行存储,因此内部是无序的! unordered_map通过key查找元素比map快非常多!!!但对应迭代的速度比较慢。 unordered_map允许[ ]下标访问! unordered_map只有正向迭代器!没有反向迭代器! unordered_set unordered_set是只储存key值的容器!和set相似,用来去重或者判断是否存在!...
哈希表详解及模拟实现(unordered_map)_如何构建哈希表-CSDN博客
目录 认识哈希表: 哈希表是一种数据结构,也称散列表,主要用于查找,且使用很频繁,可见它的效率相比其他用于查找的数据结构,肯定有优势。之前学习的顺序表和平衡二叉搜索树,查找的时间复杂度为O(n)和O(logn),它们两都需要通过key值一一比较不断缩小查找范围,进而查找到所需数据。而哈希表的优势在于无需比较,只需通过某种函数(哈希函数)计算关键码,通过映射关系可直接找到数据,近似O(1)的时间复杂度。 当向该结构中: 插入元素 根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放 搜索元素 对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置 取元素比较,若关键码相等,则搜索成功 我们将它们放入哈希表key值如何取呢?一般数据是size_t或者能强转成size_t类型的key值直接取该数据,对于无法强转的例如string,则通过哈希函数转换,key值也不是直接当作下标存入哈希表内,不然如果一个数据过大,就要开很大的数组, 一般我们需要将 数据%数组大小来得到对应的下标,这种转换也是哈希函数,...
unordered_map 和 unordered_set
unordered —— 无序的,从表面上来看,与 map 和 set 不同之处就在于,unordered_map 和 unordered_set 无法保证插入数据是有序的; 尽管如此,由于这两种容器内部封装了“哈希桶”,可以实现快速查找数据 —— 这一优点与 map 和 set 相同。 其实,除了内部结构的不同外,其余与 map 和 set 没什么不同,一样的 insert、find、erase … … 在我们模拟过 map set 的基础上,再学习封装 无序map 和 无序set 实在简单。 因此,本文的重点在于迭代器的运行逻辑 —— operator++() ,和理解模板、仿函数等。 最后,补充一个概念: 哈希 是一种思想,将传入的数据映射成一个或多个整型;哈希表 / 哈希桶 则是一种实现哈希思想的结构。 一、改造哈希桶 1.1 初步搭建 HashTable template<class T> struct HashNode { HashNode<T>* _next; T _data; HashNode(const T& data) :_next(nullptr)...
C++:map和set的封装-CSDN博客
关于红黑树的模拟实现,大家不清楚的先去看看博主的博客再来看这篇文章,因为set和map的封装底层都是利用用的红黑树。所以这里不会过多介绍红黑树的相关内容,而更多的是去为了契合STL中的红黑树去进行改造,让封装的set和map能够去复用我们的这份代码 DS进阶:AVL树和红黑树-CSDN博客 在模拟实现之前,我们肯定要尝试去看看源码是如何实现的!我们会发现其实map和set的底层都是用的红黑树去封装的 但是你可能会有这样的疑惑,map是kv模型,set是k模型,那难道stl底层封装了两颗红黑树么??其实并不是的,创建stl的大佬们为了增加代码的复用性,想方设法地想让map和set同时复用一颗红黑树。而解决方法就是通过控制模版参数来区分map和set。 既然底层是套的红黑树的壳子,我们就要来研究库里面的红黑树究竟通过了什么方法来让map和set都能够复用这份代码。 一、STL中的红黑树 我们先来看看stl中的红黑树的模版参数,然后进行分析 接下来我们来看看第三个模版参数的作用究竟是什么 总结:...
【C++】开散列实现unordered_map与unordered_set的封装-CSDN博客
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:手撕哈希表的闭散列和开散列 > 毒鸡汤:谁不是一边受伤,一边学会坚强。 > 专栏选自:C嘎嘎进阶 > 望小伙伴们点赞👍收藏✨加关注哟💕💕 🌟前言 我们已经模拟实现了哈希表,当然需要用哈希表来封装相关容器,最初的map和set封装是用红黑树,所以我们就不再封装了map和set,来封装它们的同胞兄弟unordered_map与unordered_set。对比前面map和set的封装还是比较简单的,咱们走起吧!!! ⭐主体 学习开散列实现unordered_map与unordered_set的封装咱们按照下面的图解: 概念: unordered_map其实就是与map相对应的一个容器。学过map就知道,map的底层是一个红黑树,通过中序遍历的方式可以以有序的方式遍历整棵树。而unordered_map,正如它的名字一样,它的数据存储其实是无序的,这也和它底层所使用的哈希结构有关。而在其他功能上,unordered_map和map基本上就是一致的。 特点: unordered_map是用于存储<key,...
【C++】之哈希--unordered系列关联式容器/HashTable的底层结构/HashTable的模拟实现/哈希的应用/基于Hash和位图的海量数据处理面试题-CSDN博客
在此文章之前呢 我分享一下我学习C++中的STL源码的心得 最开始学习的是vector和string 这一部分实现起来比较简单 具体可以去看看我前面写的博客 然后就是stack和queue这部分序列式就是所谓的站和队列 这部分我没有以博客的形式呈现出来 具体大家可以去参考一下stack和queue的STL源码 然后就是学的list容器 这部分也比较简单 大家感兴趣可以去看看我写的博客 也是写到了的 然后就是deque双端队列这部分大家可以去参考侯捷老师的STL源码剖析shizhi 我下面也会给大家把图片和源代码给大家呈现出来 最后就是我们今天要讲解的map和set以及unordered_map和unordered_set以及我们的重点HashTable 那么我们就开始我们的今天的哈希的学习 注意今天这部分内容算是C++里面最难的内容 哈希表大概涉及了C++中的模板和泛型编程以及含函数和迭代器——所谓的smart poniter智能指针以及我们的继承多态和封装的知识 1.stack序列式容器 stack官方文档...
【C++】map和set封装-CSDN博客
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:手撕哈希表的闭散列和开散列 > 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。 > 专栏选自:C嘎嘎进阶 > 望小伙伴们点赞👍收藏✨加关注哟💕💕 🌟前言 map和set的知识我们学习了,模拟实现我们已经实现了AVL树和红黑树。熟练知识点为map和set的使用提供了前提,手撕AVL树和红黑树让我了解到map和set的底层如何实现,有了知识点和两树的模拟铺垫,那我们该如何封装map和set呢? ⭐主体 学习map和set封装咱们按照下面的图解: Map和Set底层是用红黑树封装的,而红黑树结构是KV结构。 RBTree是通过传入的Value的值来判断类型,也就是一棵泛型的RBTree,通过不同的实例化,实现出了Map和Set,对于map:传key,对于set:传pair,如图: 简化后的map源码: 简化后的set源码: 我们查看源码后,因此在封装我们map和set时,让我们的红黑树增加一个模板参数T来识别map和set,代码如下:(此处的代码是修改了红黑树) template<class K,...
【C++】unordered_map,unordered_set模拟实现-CSDN博客
喜欢的点赞,收藏,关注一下把! 上一篇文章我们把unordered_map和unordered_set底层哈希桶的知识也都说清楚了,今天就根据哈希桶模拟实现出unordered_map和unordered_set。 这里如果看过以前文章【C++】map和set的模拟实现,应该会觉得简单。 因为unordered_map和unordered_set底层都是哈希桶,因此我们只需要一个哈希桶就好了。所以哈希桶的代码我们做一下修改,让它能够同时满足unordered_map和unordered_set的需求。 unordered_map是KV模型,unordered_set是K模型,因此先把链表节点改一下,传个T,这个T既可以是KV,也可以是K。 template<class T> struct HashNode { T _data; HashNode<T>* _next; HashNode(const T& data) :_data(data) ,_next(nullptr) {} };...
C++进阶--哈希表模拟实现unordered_set和unordered_map-CSDN博客
一、定义哈希表的结点结构 这里直接拿自己写的开散列(原先是KV模型)改造下,使其既可兼容K模型,也可兼容KV模型: 哈希表里面具体存的是什么类型的元素,是由模板参数T来决定: 如果是unordered_set,传给T就是Key 如果是unordered_map,传给T的就是pair<const Key, V> 哈希表结点结构: template<class T> struct HashNode { HashNode<T>* _next; T _data; HashNode(const T& data) :_next(nullptr) ,_data(data) {} }; 二、定义哈希表的迭代器 迭代器的结构: 注意:哈希表迭代器封装的是结点指针和哈希表指针,因为要在哈希表中找下一个桶,所以要用到哈希表指针 template<class K, class T, class KeyOfT, class Hash > class HashTable; template<class K, class T,class Ref,class Ptr, class KeyOfT, class...
C++模拟实现红黑树并实现对set和map的封装-阿里云开发者社区
前言 有了AVL树,为什么还要用红黑树? 红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O ( l o g 2 n ) O(log_2 n )O(log 2 n),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红黑树更多。 一、什么是红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J.
一篇文章让你熟悉unordered_map及其模拟实现(下)-阿里云开发者社区
开发者社区 人工智能 文章 正文 2023-10-11 4 简介: unordered_map哈希策略函数 1.
封装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++模拟实现】哈希与unorder_set和unorder_map关联式容器的模拟实现_爱写代码的刚子的博客-CSDN博客
【C++模拟实现】哈希与unorder_set和unorder_map关联式容器的模拟实现 作者:爱写代码的刚子 时间:2023.10.4 前言:本篇博客主要介绍C++中的哈希以及两大重要的容器:unorder_set和unorder_map,以及模拟实现的注意事项 哈希概念 顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经 过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O( logN),搜索的效率取决 于搜索过程中元素的比较次数。 理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过 某种函数(hashFunc)****使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函 数可以很快找到该元素。 插入元素 根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放 搜索元素 对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功...
set和map的封装-CSDN博客
介绍 set和map的底层都是红黑树,所以我们可以在自己实现的红黑树(简易版)的基础上,进行封装,成为简易的set和map #pragma once #include <iostream> #include <vector> #include <string> #include <queue> #include <cassert> #include <cstdlib> #include <utility> // 有迭代器的红黑树 namespace my_RB_Tree { enum colour { black, red }; template <class T> struct RBTreeNode // 结点 { RBTreeNode(const T& data) : _left(nullptr), _right(nullptr), _parent(nullptr), _col(red), _data(data) { } RBTreeNode* _left; RBTreeNode* _right; RBTreeNode* _parent; colour _col; T...
红黑树(有图解)_沐风ya的博客-CSDN博客
目录 介绍 概念 性质 插入 右旋 ++ -- 代码 介绍 红黑树是一种自平衡的二叉搜索树 它是在每个节点上引入额外的颜色信息,通过对任何一条从根到叶子的路径上各个结点着色方式的限制,确保没有一条路径会比其他路径长出俩倍,从而达到高度差的平衡 保证了在最坏情况下的时间复杂度为O(log n) 同时,它也是c++标准库中两种关联容器(set和map)的底层实现 结点颜色只有红色,黑色两种 根结点必须是黑色 每个叶子结点(也就是平常被我们忽略的空结点(NIL结点))都是黑色的 不能有两个连续的红色节点(从上到下的路径来看) 从任意一个节点到其每个叶子节点的路径必须包含相同数目的黑色节点,这被称为黑色高度(Black Height) 满足以上性质后,可以保证红黑树中,其最长路径中节点个数不会超过最短路径节点个数的两倍 模拟实现 和avl树一样,需要频繁用到父结点,所以需要一个parent成员 除此之外,他还需要存储每个结点的颜色信息 库中定义: stl库中,红黑树实际上还有一个哨兵位的头结点(当然没有也可以) 可以看到,树中定义了一个成员变量header...
一篇文章让你熟悉unordered_map及其模拟实现-CSDN博客
unordered_map的定义 哈希表在 C++ 标准库中的实现有一段历史。在 C++98/03 标准中,没有正式定义标准的哈希表容器。不过,许多 C++ 标准库实现(例如STLPort、SGI STL等)提供了 hash_map 和 hash_set 等扩展容器,这些容器提供了哈希表的功能。 随着 C++11 标准的引入,正式引入了 std::unordered_map 和 std::unordered_set 等哈希表容器作为 C++ 标准库的一部分。这些容器在 C++11 标准中进行了规范化,并提供了标准的接口和语法,以便开发者能够在不同的 C++ 标准库实现之间更轻松地移植代码。 因此,虽然哈希表容器在 C++98/03 标准之前已经存在,但它在 C++11 标准中经历了一些重要的改进和规范化,成为了 C++ 标准库的一部分,也因此被更广泛地使用。 template < class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator<...
<C++> 哈希表模拟实现STL_unordered_set/map
哈希表模板参数的控制 首先需要明确的是,unordered_set是K模型的容器,而unordered_map是KV模型的容器。 要想只用一份哈希表代码同时封装出K模型和KV模型的容器,我们必定要对哈希表的模板参数进行控制。 为了与原哈希表的模板参数进行区分,这里将哈希表的第二个模板参数的名字改为T。 template<class K, class T> class HashTable 如果上层使用的是unordered_set容器,那么传入哈希表的模板参数就是key和key。 template<class K> class unordered_set { public: private: HashTable<K, K> _ht; }; 但如果上层使用的是unordered_map容器,那么传入哈希表的模板参数就是key以及key和value构成的键值对。 template<class K, class V> class unordered_map { public: private: HashTable<K, pair<K, V>> _ht; };...
C++ - 开散列的拉链法(哈希桶) 介绍 和 实现
前言 之前我们介绍了,闭散列 的 开放地址法实现的 哈希表:C++ - 开放地址法的哈希介绍 - 哈希表的仿函数例子_chihiro1122的博客-CSDN博客 但是 闭散列 的 开放地址法 虽然是哈希表实现的一种,但是这种方式实现的哈希表,有一个很大的弊端,就是可能会引起一大片的哈希冲突,因为当发生哈希冲突的时候,他是按照线性探测的方式去找新的位置的,那么在冲突的位置之后,可能有一大片都是有数据存在的,那么每一次寻找都会发生哈希冲突。 而且使用 开放地址法 实现的哈希表,在查找数据的时候,计算出的起始位置不是要查找的数据的时候,也是按照上述哈希冲突的方式去寻找数据的,那么这样的效率就更低了。 更不用想,当 这种哈希表需要扩容的时候,还是类似想 realloc 函数一样,先开一个更大空间,然后再把之前的值都赋值进去之后,再计算新插入的数的初始位置,然后按照上述的方式进行插入。 这种在表当中相邻位置元素比较多的情况,使用开放地址法就会发生拥堵的情况。把本来没有发生哈希冲突的值,都加到 冲突当中了。 二次探测哈希表介绍 在上述线性探测的基础之上,引出了二次探测,如果说线性探测是按照...
【C++】unordered_set与unordered_map的封装-CSDN博客
🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘。 🛸C++专栏:C++内功修炼基地 > 家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真重要,各位路 过的友友麻烦多多点赞关注。 欢迎你们的私信提问,感谢你们的转发! 关注我,关注我,关注我,你们将会看到更多的优质内容!! 一、unordered序列关联式容器 在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到logN,最差情况下也仅需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,unordered系列容器并不是有序的。 二、unordered_map与unordered_set结构 unordered_set并不像set那样支持反向迭代器,它的迭代器底层是一个单向迭代器。...
【C++】使用红黑树进行封装map和set_平凡的小苏的博客-CSDN博客
🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘。 🛸C++专栏:C++内功修炼基地 > 家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真重要,各位路 过的友友麻烦多多点赞关注。 欢迎你们的私信提问,感谢你们的转发! 关注我,关注我,关注我,你们将会看到更多的优质内容!! 本文难点:使用红黑树封装set和map,必须保证两种数据结构复用同一棵红黑树;且满足set和map的性质,set的value不可被改变,而map的value可以被改变。 template<class T> struct RedBlackTreeNode { T _data; RedBlackTreeNode<T>* _left; RedBlackTreeNode<T>* _right; RedBlackTreeNode<T>* _parent; Color _col; RedBlackTreeNode(const T& data) : _data(data) , _left(nullptr) ,...
C++中的红黑树_格雷福斯-张三的博客-CSDN博客
搜索二叉树的概念:二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 简单来说,搜索二叉树的一个原则:如果左右树,根不为空,左树永远比根小,右树永远比根大 这个原则可运用到搜索二叉树的每个节点 用一张图来了解搜索二叉树: 二叉搜索树的优点: 查找效率:如果现在要在数组中查找一个数字是否存在,我们只能去遍历数组,但是如果在搜索二叉树中查找,从根节点开始判断,要么查找的数比根小,要么比根大,要么和根相等,如果要找的数在左边,那么右树可以全部排除,如果在右边,那么左边的数可以全部排除,以此往复下去,每次都可以将一半的数据排除,所以查找效率大大提高 二叉搜索树的缺点: 极端情况:还是在二叉搜索树中查找一个数字,但是这个时候出现了一个极端情况 上图: 这颗树符合搜索二叉树的原则吗? 答案是 当然,如果左右树不为空,左树永远比根小,右树永远比根大,很显然这颗树就是搜索二叉树 那么再来看一张图 这颗树是搜索二叉树吗?...
C++哈希(散列)与unordered关联式容器封装(Map、Set)_RXY24601的博客-CSDN博客
在C++98中,STL提供了以红黑树为底层数据结构的关联式容器(map、set等),查询时的效率可以达到,最差情况下需要比较红黑树的高度次。因此在C++11中,STL提供了四个unordered系列关联式容器,与红黑树的结构类似,但是底层结构不同。其中unordered意为无序 1.unordered_map 在unordered_map中,键值通常用于唯一标识元素,而映射值是具有与此键关联的内容的对象。键和映射值的类型可能不同。内部不会对键值或映射值进行排序,而是根据哈希值存储在桶内,并且按照键值直接快速访问单个元素(平均时间复杂度恒定) unordered_maps实现了直接访问操作符(operator[]),它允许使用key作为参数直接访问 value.
【C++】哈希表封装unordered系列_朵猫猫.的博客-CSDN博客
在看本篇文章前大家尽量拿出上一篇文章的代码跟着一步步实现,否则很容易引出大量模板错误而无法解决。 一、哈希表的封装 首先我们要解决映射的问题,我们目前的代码只能映射整形,那么如何支撑浮点数等的映射呢?只需要多加一个模板参数就可以了: template <class K, class V> struct HashNode { HashNode<K, V>* _next; pair<K, V> _kv; HashNode(const pair<K, V>& kv) :_kv(kv) , _next(nullptr) { } }; template<class K> struct HashFunc { size_t operator()(const K& key) { return key; } }; template <class K, class V, class Hash> class HashTable { typedef HashNode<K, V> Node;...
【C++】unordered_set 和 unordered_map 使用 | 封装
unordered_map官方文档 unordered_set 官方文档 set / map与unordered_set / unordered_map 使用功能基本相同,但是两者的底层结构不同 set/map底层是红黑树 unordered_map/unordered_set 底层是 哈希表 红黑树是一种搜索二叉树,搜索二叉树又称为排序二叉树,所以迭代器遍历是有序的 而哈希表对应的迭代器遍历是无序的 在map中存在rbegin以及rend的反向迭代器 在unordered_map中不存在rbegin以及rend的反向迭代器 1. unordered_set的使用 大部分功能与set基本相同,要注意的是使用unordered_set是无序的 插入数据,并使用迭代器打印,会按照插入的顺序输出,但若插入的数据已经存在,则会插入失败 2.
【C++】map和set的封装_风起、风落的博客-CSDN博客
1. 在STL中的map与set 在STL中,map和set都是使用的红黑树 map与set在STL中实现是一样的 对于value_type,map的第二个模板参数是pair,而set的第二个模板参数是key 这样写是为了map和set使用同一颗红黑树去复用map和set set < K > -> rb_tree<K,K> map<K,V> - > rb_tree<K,pair<const K,V>> 第一个模板参数拿到单独K的类型,使用Find erase接口函数的参数是K 第二个模板参数决定了树的节点是 K 类型 or K V类型 2.
【高阶数据结构】封装unordered_map 和 unordered_set
看了上两篇的文章:用红黑树封装出map和set,那么本文思路其实是大差不差的,虽然哈希表的实现比红黑树要简单,但是unordered_map 和 unordered_set 的封装却要更加复杂一点,往下看吧,发车咯 一.
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 KeyOfT
Contact KeyOfT, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack