当前位置: 首页 > news >正文

unordered_map和unordered_set的使用

前言

        在C++98中,STL提供了底层为红黑树的结构的一系列关联式容器,在查询时效率可以达到logN,即使最差的情况下需要比较红黑树的高度次,当树中的节点较多时,查询的效率也不是很理想,最好的查询是,进行很少的比较次数就能将元素找出来,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构中的关联容器的使用方法是类似的,只是底层结构不同,这里只对unordered_map和unordered_set进行介绍。

目录

1.unordered_map

        1.1unordered_map的介绍

        1.2unordered_map的接口介绍

2.unordered_set 


1.unordered_map

        1.1unordered_map的介绍

       unordered_map的在线文档

        1.unordered_map是存储<key,value>的键值对的关联式容器,其允许通过key快速索引到与之关联的value。

        2.在unordered_map中键值对是唯一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。

        3.在内部,unorderd_map没有对应的<key,value>,按照特定的顺序排序,为了能在常数范围内找到key对应的value,unordered_map将相同哈希值的键值对放到相同的桶中。

        4.unordered_map容器通过key访问单个元素的速度要比map快,但是它通常在遍历元素子集的范围内的迭代方面效率要低。

        5.unordered_map实现了直接访问操作符(operator[]),它允许使用key作为参数直接访问value。

        6.它的迭代器是前向迭代器(只支持正向遍历)。         

        1.2unordered_map的接口介绍

              1.unordered_map的构造函数

函数声明函数功能

unordered_map

构造不同类型的

unordered_map对象

        2.unordered_map的容量

函数声明函数功能
bool empty()const检测unordered_map是否为空
size_t size()const获取 unordered_map的有效元素个数

 

        3.unordered_map的迭代器

        

函数声明函数功能
begin()获取unordered_map第一个元素的迭代器
end()获取unordered_map最后一个元素下一个位置的迭代器
cbegin()获取unordered_map第一个元素的const迭代器
cend()获取unordered_map最后一个位置的下一个位置的迭代器

 

        4.unordered_map的元素访问

        

函数声明函数功能
operator[]返回与key对应的value,没有一个默认值

         注意:该函数中实际调用哈系桶的插入操作,用参数key与V()构造一个默认值往底层的哈系桶中插入,如果key不在哈系桶中,插入成功返回V(),插入失败,说明key已经在哈系桶中,将对应的value返回。

        5.unordered_map的查询

函数声明函数功能
iterator find(const K& key)返回对应key在哈系桶中的位置
size_t count(const K& key)返回哈系桶中关键码为key的键值对的个数

         注意:unordered_map中的key是不能重复的,因此count函数的返回值最大是1.

        6.unordered_map的修改操作

函数声明函数定义
Insert向容器中插入key,value的键值对
erase 删除容器中的键值对
void clear()清空容器中的有效元素的个数
void swap(unorder_map&)交换两个容器中的元素

 

        7.unordered_map的桶操作  

函数声明函数功能
size_t bucket_count()const返回哈系桶的总个数
size_t bucket_size(size_t n)const

返回n号桶中有效元素的总个数

size_t bucket(const K& key)返回元素所在的桶号

 

2.unordered_set 

         unordered_set和set的使用别无二致,这里推荐参考set的使用,set的使用。

        unordered_set的在线文档

#include<iostream>
#include<unordered_map>
#include<unordered_set>
#include<unordered_set>
using namespace std;
void TestUnordered_map()
{unordered_map<string, string> ump;//增ump.insert(make_pair<string, string>("big", "大"));ump.insert(make_pair<string, string>("long", "长"));ump.insert(make_pair<string, string>("short", "短"));ump.insert(make_pair<string, string>("known", "知道"));ump.insert(make_pair<string, string>("eye", "眼睛"));ump["haha"] = "哈哈";ump["string"];ump["left"] = "左";for (auto& e : ump)cout << e.first << ": " << e.second << endl;std::unordered_map<string, string> ::iterator it = ump.begin();while (it != ump.end()){cout << it->first << ":" << it->second << endl;++it;}std::unordered_map<string,string>::iterator it1 = ump.find("left");//查it1->second = "非左";//改cout << it1->first << ":" << it1->second << endl;ump.erase("string");//删while (it != ump.end()){cout << it->first << ":" << it->second << endl;++it;}
}
void TestUnordered_set()
{//插入std::unordered_set<int> ust;ust.insert(1);ust.insert(3);ust.insert(5);ust.insert(2);ust.insert(4);ust.insert(6);std::unordered_set<int>::iterator it = ust.begin();while (it != ust.end()){cout << *it << " ";++it;}ust.erase(1);ust.erase(2);std::unordered_set<int>::iterator it1 = ust.find(3);cout << endl;cout << *it1 << endl;it = ust.begin();while (it != ust.end()){cout << *it << " ";++it;}
}

 

相关文章:

unordered_map和unordered_set的使用

前言 在C98中&#xff0c;STL提供了底层为红黑树的结构的一系列关联式容器&#xff0c;在查询时效率可以达到logN&#xff0c;即使最差的情况下需要比较红黑树的高度次&#xff0c;当树中的节点较多时&#xff0c;查询的效率也不是很理想&#xff0c;最好的查询是&#xff0c;进…...

javascript【格式化时间日期】

javascript【格式化时间日期】 操作&#xff1a; (1) 日期格式化代码 /*** 日期格式化函数<br/>* 调用格式&#xff1a;需要使用日期对象调用* <p> new Date().Format("yyyy/MM/dd HH:mm:ss"); </p>* param fmt 日期格式* returns {*} 返回格式化…...

CCC数字钥匙设计【NFC】--什么是AID?

1、NFC中的AID是什么&#xff1f; AID&#xff0c;英文全称为Application Identifier&#xff0c;这是NFC技术中的概念&#xff0c;AID用于唯一标识一个应用。 NFC应用的AID相关操作&#xff0c;包括注册和删除应用的AID、查询应用是否是指定AID的默认应用、获取应用的AID等 …...

变压器耐压试验电压及电源容量的计算

被试变压器的额定电压为&#xff08;11081. 25%&#xff09; /10. 5kV&#xff0c; 联接组标号为 YNd11。 试验时高压分接开关置于第 1 分接位置&#xff0c; 即高压侧电压为 126kV&#xff0c; 高、 低压电压比 K1126/&#xff08;√310. 5&#xff09; 6. 93。 现以 A 相试验…...

uniapp实现底部弹出菜单选择

其实uniapp有内置的组件&#xff0c;不用自己去实现&#xff0c;类似于这样&#xff1a; uni.showActionSheet({itemList: [菜单一, 菜单二, 菜单三],success: function (res) {console.log(选中了第${res.tapIndex 1}个菜单);},fail: function (res) {console.log(res.errMs…...

14. 线性代数 - 线性方程组

文章目录 线性方程组矩阵行列式全排列和逆序数N阶行列式(非)齐次线性方程Hi,大家好。我是茶桁。 结束了「微积分」部分的学习之后我们稍作休整,今天正式开始另外一部分:「线性代数」的学习。小伙伴们放松完回来要开始紧张起来了。 我们之前说过,不管是哪一个工程学科,根…...

C++QT day4

仿照string类&#xff0c;完成myString类 #include <iostream> #include <cstring> using namespace std; class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():size(10){s…...

Python中的 if __name__ ==‘main‘

你编写的程序迟早需要创建目录以便在其中存储数据。 os 和 pathlib 包含了创建目录的函数。我们将会考虑如下方法&#xff1a; | 方法 | 描述 | | -------------------- | -------------------------- | | os.mkdir() | 创建单个子目录 | | os.makedirs() | 创建多个目录&…...

github 创建自己的分支 并下载代码

github创建自己的分支 并下载代码 目录概述需求&#xff1a; 设计思路实现思路分析1.进入到master分支&#xff0c;git checkout master;2.master-slave的个人远程仓库3.爬虫调度器4.建立本地分支与个人远程分支之间的联系5.master 拓展实现 参考资料和推荐阅读 Survive by day…...

算法:贪心---跳一跳

1、题目&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 2…...

机器学习入门教学——梯度下降、梯度上升

1、简介 梯度表示某一函数在该点处的方向导数沿着该方向取得最大值&#xff0c;即函数在该点处沿着该方向&#xff08;梯度的方向&#xff09;变化最快&#xff0c;变化率&#xff08;梯度的模&#xff09;最大&#xff0c;可理解为导数。梯度上升和梯度下降是优化算法中常用的…...

BUUCTF Reverse/[羊城杯 2020]login(python程序)

查看信息,python文件 动调了一下&#xff0c;该程序创建了一个线程来读入数据&#xff0c;而这个线程的代码应该是放在内存中直接执行的&#xff0c;本地看不到代码&#xff0c;很蛋疼 查了下可以用PyInstaller Extractor工具来解包&#xff0c;可以参考这个Python解包及反编译…...

indexDB localForage

一、前言 前端本地化存储算是一个老生常谈的话题了&#xff0c;我们对于 cookies、Web Storage&#xff08;sessionStorage、localStorage&#xff09;的使用已经非常熟悉&#xff0c;在面试与实际操作之中也会经常遇到相关的问题&#xff0c;但这些本地化存储的方式还存在一些…...

Spring Boot开发时Java对象和Json对象互转

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

C++ 多态

引例&#xff1a; #include<iostream> using namespace std; class Animal { public:void speak(){cout<<"动物在说话"<<endl;} }; class Cat:public Animal { public:void speak(){cout<<"小猫在说话"<<endl;} }; void Do…...

LeetCode 之 二分查找

网址&#xff1a; LeetCode 704.二分查找 算法模拟&#xff1a; Algorithm Visualizer 在线工具&#xff1a; C 在线工具 如果习惯性使用Visual Studio Code进行编译运行&#xff0c;需要C11特性的支持&#xff0c;可参考博客&#xff1a; VisualStudio Code 支持C11插件配…...

【性能测试】中间件优化

1、Tomcat 优化连接数、线程池 打开tomcat安装目录\conf\server.xml文件&#xff0c;在server.xml中 有以下配置&#xff1a; tomcat HTTP/1.1 <Connector port"8080" protocol"HTTP/1.1" maxThreads"1000" acceptCount"1500" c…...

【算法】查找类——二分查找算法

二分查找算法算法总结 算法描述 该算法属于查找算法。当需要从有序数组中查找某一元素时&#xff0c;可以使用该算法进行查找。&#xff08;本文章假设数组是升序排列的数组&#xff09; 算法思想 每次进行对半查找&#xff0c;获取中间元素值&#xff0c;然后与目标值进行…...

Ansible FIle模块,使用Ansible File模块进行文件管理

当使用 Ansible 进行自动化配置和管理时&#xff0c;file 模块是一个强大的工具&#xff0c;用于在目标主机上创建、修改和删除文件和目录。它提供了一种简单而灵活的方式来处理文件系统操作。在本文中&#xff0c;我们将详细介绍如何使用 Ansible 的 file 模块。 1. 创建文件 …...

索尼mp4变成rsv修复案例(ILME-FX3)

索尼mp4的修复案例讲过很多&#xff0c;这次是索尼的ILME-FX3也算是一个畅销的机型&#xff0c;一般索尼没有封装的文件是RSV文件&#xff0c;但是极少遇到有多个RSV文件的&#xff0c;下边我们来讲下这个特殊案例。 故障文件:4个RSV文件&#xff0c;大小在1.78G~28G多 故障现…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...