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.mzph.cn/news/831792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZooKeeper以及DolphinScheduler的用法

目录 一、ZooKeeper的介绍 数据模型 ​编辑 操作使用 ①登录客户端 ​编辑 ②可以查看下面节点有哪些 ③创建新的节点&#xff0c;并指定数据 ④查看节点内的数据 ⑤、删除节点及数据 特殊点&#xff1a; 运行机制&#xff1a; 二、DolphinScheduler的介绍 架构&#…

STM32解决空闲中断误触发问题.

在用串口传输大量数据时&#xff0c;发现空闲中断误触发 我是在做用串口将大量数据传入MCU这易操作时&#xff0c;发现一帧数据还没发完成&#xff0c;就进如来空闲中断&#xff0c;导致数据不完整&#xff0c;有点数据混乱了。 参考别的博主说法&#xff0c;在1个或1.5个字节时…

将java项目上传到GitHub步骤

文章目录 GitHub 作用github如何修改默认分支为master手把手教你把项目上传github上github怎么删除仓库或项目执行到push时报错的解决办法github怎么修改仓库语言 GitHub 作用 GitHub 是一个存放软件代码的网站&#xff0c;主要用于软件开发者存储和管理其项目源代码&#xff…

HTB Intuition

Intuition User nmap ┌──(kali㉿kali)-[~/…/machine/SeasonV/linux/iClean] └─$ nmap -A 10.129.22.134 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-30 05:29 EDT Nmap scan report for 10.129.22.134 Host is up (0.49s latency). Not shown: 998 …

连接HiveMQ代理器实现MQTT协议传输

先下载MQTTX: MQTTX: Your All-in-one MQTT Client Toolbox 使用线上免费的MQTTX BROKER:The Free Global Public MQTT Broker | Try Now | EMQ 打开MQTTX&#xff0c;创建连接&#xff0c;点击NEW SUBSCRIPTION,创建一个主题&#xff0c;这里使用test/topic,在下面Json中填写…

日本2024年铃木亮平主演的电影《城市猎人》

《城市猎人》是由佐藤祐市执导、三岛龙朗担任编剧、铃木亮平主演的动作片&#xff0c;于2024年4月25日上线Netflix。 该片改编自北条司的同名漫画&#xff0c;讲述了负责处理黑社会纠纷的清道夫在寻找失踪的Cosplayer时被卷入巨大阴谋的故事 [2]。 相关星图 查看更多 佐藤佑…

spring boot “error“: “Not Found“

标题spring boot “error”: “Not Found” {"timestamp": "2024-05-04T07:26:21.15000:00","status": 404,"error": "Not Found","path": "/user/register" }出现以上这个提示可能是如下原因 查看在…

中间件之搜索和数据分析组件Elasticsearch

一、概述 1.1介绍 The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash&#xff08;也称为 ELK Stack&#xff09;。 能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视 化。Elaticsearch&#xff0c;简称为 ES&a…

git的操作命令有哪些、PyCharm 中常用的 Git 操作命令、-b参数的使用、stash命令在git中的使用、rebase在git中的使用

1 git的操作命令有哪些 2 PyCharm 中常用的 Git 操作命令 3 -b参数的使用 4 stash命令在git中的使用 5 rebase在git中的使用 1 git的操作命令有哪些 1. **初始化一个新的仓库**&#xff1a;git init2. **克隆仓库**&#xff1a;git clone <repository_url>3. **添加文件…

【Android学习】自定义文本框和输入监听

实现功能 以上代码可实现功能&#xff1a; 1 自定义文本框样式 2. 文本框触发形式转变 3. 文本框输入长度监听&#xff0c;达到最大长度关闭软键盘 4. password框触发检测phone框内容 1. drawable自定义形状 我创建了editor_focus.xml 和 editor_unfocus.xml&#xff0c;两者仅…

Codeforces Round 943 (Div. 3 ABCDEFG1G2题) 视频讲解

A. Maximize? Problem Statement You are given an integer x x x. Your task is to find any integer y y y ( 1 ≤ y < x ) (1\le y<x) (1≤y<x) such that gcd ⁡ ( x , y ) y \gcd(x,y)y gcd(x,y)y is maximum possible. Note that if there is more tha…

计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设

安顺学院本科毕业论文(设计)题目申请表 院别&#xff1a;数学与计算机科学 专业&#xff1a;数据科学与大数据 时间&#xff1a;2022年 5月26日 题 目 情 况 题目名称 基于hive数据仓库的考研信息离线分析系统的设计与实现 学生姓名 杨娣荧 学号 201903144042 …

华为鸿蒙系统(Huawei HarmonyOS)

华为鸿蒙系统&#xff08;华为技术有限公司开发的分布式操作系统&#xff09; 华为鸿蒙系统&#xff08;HUAWEI HarmonyOS&#xff09;&#xff0c;是华为公司在2019年8月9日于东莞举行的华为开发者大会&#xff08;HDC.2019&#xff09;上正式发布的分布式操作系统。 华为鸿蒙…

CLIP模型-中文-通用领域-large部署

CLIP模型-中文-通用领域-large 官网 LLM微调文档 快速开始

基于免疫粒子群算法的考虑负荷需求相应的热电联供系统优化调度(MATLAB实现)

为了实现基于免疫粒子群算法的考虑负荷需求相应的热电联供系统优化调度&#xff0c;我们可以按照以下步骤进行&#xff1a; 1. 定义目标函数&#xff1a;根据热电联供系统的运行成本、环境效益等因素&#xff0c;构建目标函数。 2. 初始化免疫粒子群算法参数&#xff1a;包括种…

使用DependencyCheck工具检测JAR依赖包的安全漏洞

引言 Dependency-Check 是一个开源工具,用于检测软件项目中使用的第三方库和组件是否存在已知的安全漏洞。它可以帮助开发团队及时发现和解决项目中的潜在安全风险,从而提高软件的安全性。 该工具通过分析项目的依赖关系,识别其中使用的第三方库和组件,并与已知的漏洞数据…

代码随想录算法训练营第四十二天

我家娃可太好看了&#xff0c;有点担心月嫂走了没法照顾娃。 明天没有新的题&#xff0c;所以我今天开个头吧。又懒了。 01背包问题 二维 思路看了一遍&#xff0c;默写一下哈。甚至看了两遍&#xff0c;但是还没开始搞。。。振作起来&#xff01;&#xff01;&#xff01; 目…

IOS 开发 - block 使用详解

1.Blobk的定义 block的写法相对难记,不必司机应被,只需要在xcode里打出"inlineBlock"--回车, 系统会自动帮你把基础版写法给你匹配出来 //Block的基础声明//等号""之前是blobk的声明,等号“”后面是block的实现/*returnType:返回类型(void、int、String *…

如何使用 Nginx、MySQL、 PHP 在 Ubuntu 22.04 上安装 WordPress

Apache通常是部署WordPress的首选&#xff0c;因为它被广泛使用&#xff0c;配置简单&#xff0c;并且与WordPress的要求具有强大的兼容性。 然而&#xff0c;Nginx是一个可行的替代方案&#xff0c;并提供了自己的一系列优势。Nginx以其高性能而闻名&#xff0c;特别是在处理…

速盾:高防CDN-完美防御

如今&#xff0c;网络安全已成为企业和个人不可忽视的重要问题之一。随着网络技术的不断发展&#xff0c;网络攻击的手段也越来越复杂和隐蔽。因此&#xff0c;保护网络的安全性变得尤为重要。针对网络攻击的防护手段也在不断升级和完善。其中&#xff0c;高防CDN作为一种完美的…