首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】unordered_map与unordered_set使用

    unordered_set的声明如下,Key就是unordered_set底层关键字的类型 unordered_set默认要求Key⽀持转换为整形,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现⽀...⼀般情况下,我们都不需要传后三个模板参数 unordered_set底层是⽤ 哈希桶 实现,增删查平均效率是 O (1) ,迭代器遍历不再有序,为了跟set 区分,所以取名unordered_set...= allocator // unordered_set::allocator_type > class unordered_set; 1.3unordered_set...unordered_set和set的第⼀个差异是对key的要求不同,set要求Key⽀持⼩于⽐较,⽽ unordered_set要求Key⽀持转成整形且⽀持等于⽐较,要理解unordered_set...(哈希表下篇博客提到) unordered_set和set的第⼆个差异是迭代器的差异,set的iterator是双向迭代器,unordered_set 是单向迭代器,其次set底层是红⿊树,红

    32500

    【C++】unordered_set 和 unordered_map 使用 | 封装

    使用 unordered_map官方文档 ---- unordered_set 官方文档 ---- set / map与unordered_set / unordered_map 使用功能基本相同,但是两者的底层结构不同...头文件,在其中创建命名空间unordered_set 在unordered_set中实现一个仿函数, unordered_set 的第二个参数 为 K unordered_set作为 K 模型 ,所以...对于 begin和end的复用 在unordered_set中,使用哈希桶中的HashTable的迭代器 来实现unordered_set的迭代器 加入typename 是因为编译器无法识别HashBucket...修改迭代器数据 问题 在unordered_set中,借助 哈希桶中的普通迭代器 实现 unordered_set的普通迭代器 在unordered_set中,借助 哈希桶中的const迭代器 实现...unordered_set的const迭代器 ---- 在STL中,是不允许 unordered_set去 *it 修改数据的 ,但是在自己实现的迭代器中却可以通过 ---- 在STL中将 unordered_set

    55640

    unordered_set 与unordered_multiset?我们该如何选择

    这就意味着: 相同数据量下,unordered_set 的内存占用往往比 set 还要大。 遍历时,内存访问是跳来跳去的,缓存友好度极差。...unordered_set 是离散节点,CPU 每次都要去不同的内存块取数据,缓存 miss 一大堆。...和 set 的对比 一句话总结: 要有序、要范围查询,选 set。 要极致查找/插入性能,选 unordered_set。 数据量小?...unordered_set 底层是哈希表,无序,不支持范围查询,但平均查找插入 O(1)。 如果你只关心“存不存在”,而不关心顺序,unordered_set 更好。...要有序用 set,要快用 unordered_set,数据少用 vector。 别依赖迭代顺序,它根本不保证稳定。 哈希函数决定上限,冲突严重时 O(1) 也没用。

    12210

    哈希表模拟封装unordered_map和unordered_set

    前言: 首先我们要知道unordered_map和unordered_set的底层是用hash表实现的,也就是说它们底层成员就是一个哈希类的对象,完成了对它的封装,为两个关联容器,即以hash的模版,对应两者传模版参数完成调用工作...一·哈希表的调用: 这里我们采用的是链地址发来实现的hash表,也就说这是一个基本的模版hash表,但是我们不能直接用,因为如果是为了适应unordered_map和unordered_set,还需要有迭代器...() { int a[] = { 3,11,999,7,193,82,1,9,5,62333,7,6 }; unordered_set s; for (auto e : a) {...s.insert(e); } unordered_set::iterator it = s.begin(); while (it !...{ s.insert(e); } unordered_set::iterator it = s.begin(); while (it !

    15100

    C++之unordered_set和unordered_map基本介绍

    unordered_set:存储唯一键的集合,每个元素只出现一次 unordered_map:存储键值对,每个键唯一对应一个值 一.unordered_set 1.1概述 unordered_set 是一个不包含重复元素的集合容器...由于unordered_set和set增删查以及使用基本一致,在这里就不做过多赘述 1.2与set的差异 对key的要求 unordered_set和set的第⼀个差异是对key的要求不同,set要求Key...二、unordered_set 对键的要求 (一)哈希函数 unordered_set 是基于哈希表实现的无序容器,它需要对键进行哈希操作以确定键的存储位置。...因此,unordered_set 要求键类型必须提供一个哈希函数。默认情况下,unordered_set 使用 std::hash 作为哈希函数,但并非所有类型都提供了默认的哈希函数。...迭代器差异 unordered_set和set的第⼆个差异是迭代器的差异,set的iterator是双向迭代器,unordered_set是单向迭代器,其次set底层是红⿊树,红⿊树是⼆叉搜索树,⾛中序遍历是有序的

    11810

    【C++深度探索】unordered_set、unordered_map封装

    ,来对C++STL库中的unordered_set和unordered_map进行模拟实现。...✨unordered_set介绍 文档介绍,点击跳转   unordered_set与unordered_map类似,不同在于前者储存单个数据,后者储存键值对,这里就不过多介绍。 2....修改哈希表   因为我们要使用哈希表来实现对unordered_set和unordered_map的封装,之前实现的哈希表都是插入键值对,是没办法很好封装unordered_set的,所以我们先得对哈希表进行改造...存储的不是键值对,我们也可以复用上面的代码,传入两个一样的参数即可: //unordered_set类 template class unordered_set { public: private...: HashTable _ht; }; 虽然unordered_set看起来传了两个一模一样的参数是无意义的,但是这样就可以实现对哈希表的复用,不用单独为了unordered_set再写一个哈希表了

    36710
    领券