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的介绍 架构&#…

将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]。 相关星图 查看更多 佐藤佑…

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

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

【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;上正式发布的分布式操作系统。 华为鸿蒙…

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

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

IOS 开发 - block 使用详解

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

zabbix监控Tongweb7企业版(by lqw+sy)

此贴参考zabbix通过jmx监控Tongweb7企业版&#xff08;by lqw&#xff09;&#xff0c;是在此帖子的基础和同事整理的文档基础上重新部署验证的优化版&#xff0c;使用的是centos7。 优点&#xff1a; 1.不需要通过jmx配置进行监控。&#xff08;jmx配置需要修改tongweb的配置…

IO复用技术(1)——select/poll/epoll原理介绍及使用案例

文章目录 1.Select1.1 工作流程1.2 fd_set函数1.3 select函数1.4 例程 2.poll2.1 poll函数2.2 例程 3.epoll3.1 工作流程3.2 相关函数3.3 epoll的两种工作模式3.4 示例代码 4.总结 原理&#xff1a;使用一个线程来检查多个文件描述符&#xff0c;委托内核进行检查&#xff0c;如…

Mac OS系统如何更新

用了好几年的Mac Book安装软件经常提示需要更高的系统版本&#xff0c;因此要升级系统版本&#xff0c;但是开始在系统设置里面找了一下没有找到升级的按钮&#xff0c;找了资料后才知道如何升级。有以下两种入口 一、App Store搜索MacOs&#xff0c;在出现的搜索结果中选择下载…

微服务----nacos配置及简单使用

目录 什么是nacos 项目在nacos上进行注册 注入nacos依赖 配置application.yml文件 nacos写入配置文件 首先&#xff0c;还是需要导入依赖 然后在nacos中编写配置文件 prod是我自定义的一个命名空间&#xff0c;在这里面进行配置文件编写~ 启动类上加上注解 编写Patt…

SpringBoot+Vue项目企业客户管理系统

一、前言介绍 本文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企业客户管理系统的当前背景以及系统开…

Qt之信号与槽

槽的本质&#xff1a;对信号响应的函数。 信号函数和槽函数通常位于某个类中&#xff0c;和普通的成员函数相⽐&#xff0c;它们的特别之处在于&#xff1a; 信号函数⽤ signals 关键字修饰&#xff0c;槽函数⽤ public slots、protected slots 或者 private slots 修饰。sign…

数据结构---单链表

题目&#xff1a;构造一个单链表。 使用的软件&#xff1a;VS2022使用的语言&#xff1a;C语言使用的项目&#xff1a;test.c Setlist.h Setlish.c 项目实践&#xff1a; Setlist.h的代码为&#xff1a; #pragma once#include<stdio.h> #include<stdlib.h> #incl…

【算法小白周赛2】A.朋友遍天下(easy)C++代码和题解

题目链接&#xff1a;https://www.starrycoding.com/problem/165 题目描述 本题与hard版本有一定区别&#xff0c;仅“拜访时间安排表”的规则相同&#xff0c;hard版本需要进行一定修改才能通过easy版本。 醋酸锌有许多的好友&#xff0c;为了能好好拜访他的每一个好友&…