c++中unrodered_map与unordered_set的基本使用

unordered_map

在C++中,std::unordered_map 是一个无序关联容器,它包含可以重复的键-值对组合,但每个键在容器中必须是唯一的。与std::map不同,std::unordered_map不按照键的排序顺序存储元素,而是使用哈希表来存储元素,从而提供了常数时间复杂度的平均查找、插入和删除操作。

以下是一些std::unordered_map的常用成员函数及其用法:

  1. 构造函数和析构函数

    • unordered_map(): 默认构造函数,创建一个空的unordered_map
    • unordered_map(size_type n): 创建一个具有n个桶的unordered_map
    • unordered_map(size_type n, const hasher& hf): 创建一个具有n个桶并使用给定哈希函数的unordered_map
    • unordered_map(size_type n, const hasher& hf, const key_equal& eql): 创建一个具有n个桶、给定哈希函数和键相等函数的unordered_map
    • unordered_map(const unordered_map& other): 拷贝构造函数。
    • ~unordered_map(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回unordered_map中元素的数量。
    • bool empty() const noexcept: 如果unordered_map为空,则返回true
  3. 插入和删除

    • pair<iterator,bool> insert(const value_type& val): 尝试插入一个元素。如果键已存在,则不插入新值(保留旧值),并返回表示该键已经存在的pair(迭代器指向已存在的元素,bool值为false)。如果键不存在,则插入新元素,并返回表示插入成功的pair(迭代器指向新插入的元素,bool值为true)。
    • iterator insert(const_iterator pos, const value_type& val): 在指定位置之前尝试插入元素(但位置只是提示,实际插入位置可能不同)。
    • iterator erase(const_iterator position): 删除指定位置的元素。
    • size_type erase(const key_type& key): 删除键为key的元素(如果存在),并返回被删除的元素数量(0或1)。
    • iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。
    • void clear() noexcept: 删除所有元素。
  4. 查找和访问

    • iterator find(const key_type& key): 查找键为key的元素。如果找到,则返回指向该元素的迭代器;否则返回end()
    • const_iterator find(const key_type& key) const: 同上,但返回常量迭代器。
    • size_type count(const key_type& key) const noexcept: 返回键为key的元素的数量(对于unordered_map,这总是0或1)。
    • mapped_type& operator[](const key_type& key): 访问或插入具有指定键的元素。如果键不存在,则插入新元素并为其分配默认值。返回与键关联的值的引用。
    • mapped_type& at(const key_type& key): 访问键为key的元素的值。如果键不存在,则抛出std::out_of_range异常。
  5. 迭代器

    • std::unordered_set类似,std::unordered_map也提供了一系列迭代器函数来遍历容器中的元素。
  6. 哈希策略

    • hasher hash_function() const: 返回用于哈希键的函数对象。
    • key_equal key_eq() const: 返回用于比较键的函数对象。
    • size_type bucket_count() const noexcept: 返回容器中的桶数。
    • size_type max_bucket_count() const noexcept: 返回容器可以拥有的最大桶数。
    • size_type bucket_size(size_type n) const: 返回第n个桶中的元素数量。
    • size_type bucket(const key_type& key) const: 返回键key所在的桶的索引。

这只是std::unordered_map的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。

unordered_set

在C++中,std::unordered_set 是一个无序关联容器,它包含唯一元素。与 std::set 不同,std::unordered_set 不保证元素之间的任何特定顺序;元素的顺序可能会随着元素的插入和删除而改变。std::unordered_set 通常使用哈希表实现,因此查找、插入和删除操作的平均时间复杂度是 O(1)。

以下是一些 std::unordered_set 的常用成员函数及其用法:

  1. 构造函数和析构函数

    • unordered_set(): 默认构造函数,创建一个空的 unordered_set
    • unordered_set(size_type n): 创建一个具有 n 个桶的 unordered_set
    • unordered_set(size_type n, const hasher& hf): 创建一个具有 n 个桶并使用给定哈希函数的 unordered_set
    • unordered_set(size_type n, const hasher& hf, const key_equal& eql): 创建一个具有 n 个桶、给定哈希函数和键相等函数的 unordered_set
    • unordered_set(const unordered_set& other): 拷贝构造函数。
    • ~unordered_set(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回 unordered_set 中元素的数量。
    • bool empty() const noexcept: 如果 unordered_set 为空,则返回 true
  3. 插入和删除

    • pair<iterator,bool> insert(const value_type& val): 尝试插入一个元素。如果元素已存在,则插入失败,并返回表示该元素已经存在的 pair(迭代器指向已存在的元素,bool 值为 false)。如果元素不存在,则插入新元素,并返回表示插入成功的 pair(迭代器指向新插入的元素,bool 值为 true)。
    • iterator insert(const_iterator pos, const value_type& val): 在指定位置之前尝试插入元素(但位置只是提示,实际插入位置可能不同)。
    • iterator erase(const_iterator position): 删除指定位置的元素。
    • size_type erase(const key_type& key): 删除键为 key 的元素(如果存在),并返回被删除的元素数量(0或1)。
    • iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。
    • void clear() noexcept: 删除所有元素。
  4. 查找

    • iterator find(const key_type& key): 查找键为 key 的元素。如果找到,则返回指向该元素的迭代器;否则返回 end()
    • size_type count(const key_type& key) const noexcept: 返回键为 key 的元素的数量(对于 unordered_set,这总是0或1)。
  5. 迭代器

    • iterator begin() noexcept: 返回指向第一个元素的迭代器。
    • const_iterator begin() const noexcept: 同上,但返回常量迭代器。
    • iterator end() noexcept: 返回指向容器“尾部之后”的迭代器。
    • const_iterator end() const noexcept: 同上,但返回常量迭代器。
    • reverse_iterator rbegin() noexcept: 返回指向最后一个元素的反向迭代器。
    • const_reverse_iterator rbegin() const noexcept: 同上,但返回常量反向迭代器。
    • reverse_iterator rend() noexcept: 返回指向“反向尾部之前”的反向迭代器。
    • const_reverse_iterator rend() const noexcept: 同上,但返回常量反向迭代器。
  6. 哈希策略

    • hasher hash_function() const: 返回用于哈希键的函数对象。
    • key_equal key_eq() const: 返回用于比较键的函数对象。
    • size_type bucket_count() const noexcept: 返回容器中的桶数。
    • size_type max_bucket_count() const noexcept: 返回容器可以拥有的最大桶数。
    • size_type bucket_size(size_type n) const: 返回第 n 个桶中的元素数量。
    • size_type bucket(const key_type& key) const: 返回键 key 所在的桶的索引。

这只是 std::unordered_set 的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/592200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

08 IRF技术 华三交换机实现

IRF 详细介绍 我知道 AI IRF 技术是指集成路由功能(Integrated Routing and Bridging)技术,是惠普(Hewlett Packard)公司开发的一种基于硬件的虚拟化技术。IRF 技术可以将多台物理设备组合成一个逻辑设备,实现设备的高可用性和灵活性。 IRF 技术主要有以下特点: 1. …

Linux---为什么会有粘滞位?

在前面已经讲过目录的rwx权限&#xff1a; 可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 有可写权限(w):如果目录没有可写权限&#xff0c;则无法在目录中创建文件, 也无法在目录中删除文件.可执行权限(x): 如果目录没有可执行权限, 则无法cd到…

五一后返工,3招帮你快速找回状态!

五一假期即将结束&#xff0c;如何快速进入工作状态 随着五一假期的临近结束&#xff0c;我们即将迎来新的工作挑战。在享受了短暂的休息和放松之后&#xff0c;重新调整心态&#xff0c;迅速进入工作状态显得尤为重要。本文将为您提供一些实用的方法和建议&#xff0c;帮助您…

Elasticsearch中【文档查询】DSL语句以及对应的Java实现

目录 全文检索查询 精准查询 布尔查询 排序、分页查询 高亮 地理查询 复合查询 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一般测…

【业务场景】京东实际场景,频繁GC引起的CPU飙高问题的解决

目录 1.业务介绍 2.判断任务类型 3.CPU飙高的原因 1.业务介绍 本文的业务场景是京东零售线公开的一篇文章&#xff0c;文章内容详细介绍了京东零售线如何将广告相关的定时任务从半小时优化到秒级的&#xff0c;原文链接&#xff1a; 半小时到秒级&#xff0c;京东零售定时…

BUUCTF:Web 解析(一)

前言 Buuctf Web 是一个在线安全挑战平台&#xff0c;旨在提高参与者对网络安全的理解和实践能力。本文将详细介绍 Buuctf Web 的特点、挑战和机遇&#xff0c;帮助读者更好地了解这一领域。 一、Buuctf Web 的特点 多样化的挑战场景&#xff1a;Buuctf Web 提供了多种挑战场…

Redis事务,管道,发布订阅

Redis事务 redis事务本质上是一组命令的集合,按照顺序串行化执行命令而不被其他命令打断 redis事务开启后将要执行的命令放到事务队列中,提交事务后一次性顺序排他地执行所有命令 关键词:单线程,无隔离级别,不保证原子性,排他性,顺序性 要注意和mysql的acid进行区分 怎么用…

【JavaEE】多线程安全问题

文章目录 1、什么是多线程安全问题2、出现线程不安全的原因2.1 线程在系统中是随机调度&#xff0c;抢占式执行的2.2 多个线程同时修改同一个变量2.3 线程针对变量的修改操作&#xff0c;不是“原子”的2.4 内存可见性问题2.5 指令重排序 3 、如何解决线程安全问题3.1 锁操作3.…

2024年3月Scratch图形化编程等级考试(三级)真题试卷

2024年3月Scratch图形化编程等级考试&#xff08;三级&#xff09;真题试卷 选择题 第 1 题 Scratch运行程序后&#xff0c;角色一定不会说出的数字是&#xff1f;&#xff08; &#xff09; A.2 B.4 C.6 D.8 第 2 题 Scratch角色初始位置如下图所示&#xff0c;右图…

14_Scala面向对象编程_属性

属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采用下划线赋值&#xff0c;表示系统默认赋值 , –但是此方法局限于变量&…

ArkTS开发原生鸿蒙HarmonyOS短视频应用

HarmonyOS实战课程“2024鸿蒙零基础快速实战-仿抖音App开发&#xff08;ArkTS版&#xff09;”已经于今日上线至慕课网&#xff08;https://coding.imooc.com/class/843.html&#xff09;&#xff0c;有致力于鸿蒙生态开发的同学们可以关注一下。 课程简介 本课程以原生鸿蒙Ha…

Hibernate执行流程分析及配置文详解

目录 1、Hibernate执行流程分析及配置文件详解 1&#xff09;Configuration对象 2&#xff09;ServiceRegistry对象&#xff08;hibernate4的新特性&#xff09; 3&#xff09;SessionFactory对象 4&#xff09;Session对象 5&#xff09;Transaction对象 6&#xff09;…

缓冲流,BufferReader,BufferWriter,案例

IO流的体系 字节缓冲流的作用 提高字节流读取数据的性能 *原理&#xff1a;字节缓冲输入流自带了8Kb的缓冲池&#xff0c;字节缓冲输出流也自带了8kb的缓冲池 构造器说明public BufferedInputStream(InputStream is)把低级的字节输入流包装成一个高级的缓冲字节输入流&#…

对链表进行插入排序(详细解析)

对链表进行插入排序&#xff08;详解&#xff09; 题目&#xff1a; 对链表进行插入排序 给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的&#xff0c;每次只移动一个元素&a…

特斯拉FSD落地分析

再续前缘 媒体的神经从马斯克的湾流私人飞机起飞那一刻开始,就开始被牵动着。28/4 号的突然访华,在大多数人看来其实已经早已是计划之中,从摆在台面上的消息来看,主要目的是为了在大陆推广FSD的落地,也为8月份FSD 的正式版本做预热,和中国上海的第一次联姻造就了特斯拉m…

17 内核开发-内核内部内联汇编学习

​ 17 内核开发-内核内部内联汇编学习 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础&#xff0c;让他们能够理解和参与到Linux内核的开发过程中…

【Linux】进程exec函数族以及守护进程

一.exec函数族 1.exec函数族的应用 在shell下敲shell的命令都是在创建shell的子进程。而我们之前学的创建父进程和子进程代码内容以及通过pid与0的关系来让父子进程执行不同的代码内容都是在一个代码文件里面&#xff0c;而shell是如何做到不在一个文件里面写代码使之成为子进…

06|LangChain | 从入门到实战 -六大组件之Agent

点点赞~ 注意&#xff1a;langchain的版本迭代比较快&#xff0c;社区维护&#xff0c;代码当中或许部分方法在某个版本不再支持 01&#xff5c;LangChain | 从入门到实战-介绍 02&#xff5c;LangChain | 从入门到实战 -六大组件之Models IO 03&#xff5c;LangChain | 从入…

asp.net结课作业中遇到的问题解决2

目录 1、如何实现评论交流的界面 2、如果想要将文字添加到数据库中&#xff0c;而不是乱码&#xff0c;该怎么修改 3、如果想要添加的数据已经存在于数据库&#xff0c;就不允许添加了&#xff0c;该如何实现 4、想要实现某个模块下有好几个小的功能该如何实现 5、想要实现…

代码随想录算法训练营第25天 | 216.组合总和III、17.电话号码的字母组合

代码随想录算法训练营第25天 | 216.组合总和III、17.电话号码的字母组合 自己看到题目的第一想法看完代码随想录之后的想法 链接: 216.组合总和III 链接: 17.电话号码的字母组合 自己看到题目的第一想法 216.组合总和III&#xff1a;递归函数终止条件为搜索得到的数相加为n&…
最新文章