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中,STL提供了底层为红黑树的结构的一系列关联式容器,在查询时效率可以达到logN,即使最差的情况下需要比较红黑树的高度次,当树中的节点较多时,查询的效率也不是很理想,最好的查询是,进…...
javascript【格式化时间日期】
javascript【格式化时间日期】 操作: (1) 日期格式化代码 /*** 日期格式化函数<br/>* 调用格式:需要使用日期对象调用* <p> new Date().Format("yyyy/MM/dd HH:mm:ss"); </p>* param fmt 日期格式* returns {*} 返回格式化…...
CCC数字钥匙设计【NFC】--什么是AID?
1、NFC中的AID是什么? AID,英文全称为Application Identifier,这是NFC技术中的概念,AID用于唯一标识一个应用。 NFC应用的AID相关操作,包括注册和删除应用的AID、查询应用是否是指定AID的默认应用、获取应用的AID等 …...
变压器耐压试验电压及电源容量的计算
被试变压器的额定电压为(11081. 25%) /10. 5kV, 联接组标号为 YNd11。 试验时高压分接开关置于第 1 分接位置, 即高压侧电压为 126kV, 高、 低压电压比 K1126/(√310. 5) 6. 93。 现以 A 相试验…...
uniapp实现底部弹出菜单选择
其实uniapp有内置的组件,不用自己去实现,类似于这样: 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类,完成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 包含了创建目录的函数。我们将会考虑如下方法: | 方法 | 描述 | | -------------------- | -------------------------- | | os.mkdir() | 创建单个子目录 | | os.makedirs() | 创建多个目录&…...
github 创建自己的分支 并下载代码
github创建自己的分支 并下载代码 目录概述需求: 设计思路实现思路分析1.进入到master分支,git checkout master;2.master-slave的个人远程仓库3.爬虫调度器4.建立本地分支与个人远程分支之间的联系5.master 拓展实现 参考资料和推荐阅读 Survive by day…...
算法:贪心---跳一跳
1、题目: 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 2…...
机器学习入门教学——梯度下降、梯度上升
1、简介 梯度表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(梯度的方向)变化最快,变化率(梯度的模)最大,可理解为导数。梯度上升和梯度下降是优化算法中常用的…...
BUUCTF Reverse/[羊城杯 2020]login(python程序)
查看信息,python文件 动调了一下,该程序创建了一个线程来读入数据,而这个线程的代码应该是放在内存中直接执行的,本地看不到代码,很蛋疼 查了下可以用PyInstaller Extractor工具来解包,可以参考这个Python解包及反编译…...
indexDB localForage
一、前言 前端本地化存储算是一个老生常谈的话题了,我们对于 cookies、Web Storage(sessionStorage、localStorage)的使用已经非常熟悉,在面试与实际操作之中也会经常遇到相关的问题,但这些本地化存储的方式还存在一些…...
Spring Boot开发时Java对象和Json对象互转
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...
C++ 多态
引例: #include<iostream> using namespace std; class Animal { public:void speak(){cout<<"动物在说话"<<endl;} }; class Cat:public Animal { public:void speak(){cout<<"小猫在说话"<<endl;} }; void Do…...
LeetCode 之 二分查找
网址: LeetCode 704.二分查找 算法模拟: Algorithm Visualizer 在线工具: C 在线工具 如果习惯性使用Visual Studio Code进行编译运行,需要C11特性的支持,可参考博客: VisualStudio Code 支持C11插件配…...
【性能测试】中间件优化
1、Tomcat 优化连接数、线程池 打开tomcat安装目录\conf\server.xml文件,在server.xml中 有以下配置: tomcat HTTP/1.1 <Connector port"8080" protocol"HTTP/1.1" maxThreads"1000" acceptCount"1500" c…...
【算法】查找类——二分查找算法
二分查找算法算法总结 算法描述 该算法属于查找算法。当需要从有序数组中查找某一元素时,可以使用该算法进行查找。(本文章假设数组是升序排列的数组) 算法思想 每次进行对半查找,获取中间元素值,然后与目标值进行…...
Ansible FIle模块,使用Ansible File模块进行文件管理
当使用 Ansible 进行自动化配置和管理时,file 模块是一个强大的工具,用于在目标主机上创建、修改和删除文件和目录。它提供了一种简单而灵活的方式来处理文件系统操作。在本文中,我们将详细介绍如何使用 Ansible 的 file 模块。 1. 创建文件 …...
索尼mp4变成rsv修复案例(ILME-FX3)
索尼mp4的修复案例讲过很多,这次是索尼的ILME-FX3也算是一个畅销的机型,一般索尼没有封装的文件是RSV文件,但是极少遇到有多个RSV文件的,下边我们来讲下这个特殊案例。 故障文件:4个RSV文件,大小在1.78G~28G多 故障现…...
AI浪潮下,普通程序员如何避免沦为“提示词工程师”?
一、从“提示词执行者”到“质量架构师”:重新定义测试的价值锚点AI之所以能替代大量重复性测试工作,是因为它擅长处理“已知的已知”——那些规则明确、边界清晰的测试场景。然而,软件测试的真正价值,从来不在执行层面࿰…...
企业知识管理新方案:OpenCorpo开源项目部署与RAG架构实践
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫 OpenCorpo。这名字听起来有点“高大上”,但说白了,它就是一个帮你把公司内部那些零散、混乱的文档、知识、流程给“盘活”的工具。想象一下,你公司里是不是有无数个共享…...
I²C总线协议深度解析:从物理层到实战调试与疑难排查
1. IC总线:从电视遥控器到无处不在的嵌入式神经如果你在过去的二十年里摆弄过任何一块微控制器开发板,或者拆解过一台智能家电,那么你几乎百分之百会碰到两根被拉高的信号线,一根是时钟(SCL),一…...
怎样轻松上手yuzu模拟器:3个实用技巧帮你快速畅玩Switch游戏
怎样轻松上手yuzu模拟器:3个实用技巧帮你快速畅玩Switch游戏 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 你是不是也想在电脑上玩Switch游戏,但又觉得模拟器配置太复杂?别担心…...
100GbE技术演进:背板PAM4与光模块25G的路线之争
1. 高速以太网技术演进中的十字路口:100GbE的“戏剧性”挑战在通信与网络设备、半导体设计与制造这个圈子里待久了,你会发现技术标准的制定过程,其精彩程度丝毫不亚于一部精心编排的戏剧。尤其是当我们谈论到以太网,这个支撑起全球…...
网盘下载体验革命:8大平台直链获取工具完全指南
网盘下载体验革命:8大平台直链获取工具完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...
【限时开放】ChatGPT-Sora 2联合推理链搭建教程:含Prompt模板库、错误码速查表与延迟压测数据(仅存96小时)
更多请点击: https://intelliparadigm.com 第一章:ChatGPT-Sora 2联合推理链的核心架构与演进逻辑 ChatGPT-Sora 2联合推理链代表了多模态大模型协同推理范式的重大跃迁——它并非简单地将语言模型与视频生成模型并联调用,而是构建了语义对齐…...
【Midjourney v8图像修复终极指南】:9大隐藏参数调优+3类高频崩坏场景实战修复(2024官方未公开文档级解析)
更多请点击: https://intelliparadigm.com 第一章:Midjourney v8图像修复功能全景概览 Midjourney v8 引入了革命性的图像修复(Image Inpainting)能力,不再依赖外部图层或第三方工具,而是通过原生提示词指…...
终极指南:如何在Windows上使用BiliBili-UWP第三方客户端告别卡顿,享受流畅观影体验
终极指南:如何在Windows上使用BiliBili-UWP第三方客户端告别卡顿,享受流畅观影体验 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端,当然,是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP 还在…...
DocX安全特性完全指南:文档保护、密码加密和数字签名终极教程
DocX安全特性完全指南:文档保护、密码加密和数字签名终极教程 【免费下载链接】DocX Fast and easy to use .NET library that creates or modifies Microsoft Word files without installing Word. 项目地址: https://gitcode.com/gh_mirrors/doc/DocX DocX…...
