STL(七)(map篇)

news2024/11/18 9:27:01
  1. ### 这里重点学习map 
  2. ### 在实际做题过程中,multimap几乎用不到
  3. ### unordered_map拥有极好的平均时间复杂度和极差的最坏时间复杂度,所以他的时间复杂度是不稳定的,unordered_map一般用不到,要做一个了解

1.map

  • map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的
  • map容器根据键来自动进行排序,并且可以通过键快速查找对应的值
  • map容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入,删除和查找操作的时间复杂度0(logn)

map的定义和结构如下:

template <class Key, class T,class Compare =less<Key>,
    class Allocator=allocator<pair<const Key, T>>>
class map;
  1. Key:表示存储在map中的键(key)的类型
  2. T:表示存储在map中的值(value)的类型
  3. Compare:表示用于比较键的函数对象的类型,默认为less,使用键类型的默认比较函数
  4. Allocator:表示用于分配内存的分配器类型,默认为allocator

 


2.multimap

  • multimap是一种关联容器,类似于map,但允许存储多个具有相同键的键值对
  • multimap容器根据键来自动进行排序,并且可以通过键快速查找对应的值
  • multimap容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入,删除和查找操作的时间复杂度

multimap的定义和结构如下:

template <class Key,class T,class Compare =less<key>,
    class Allocator=allocator<pair<const Key,T>>>
class multimap;
  1. Key:表示存储在multimap中的键(key)的类型
  2. T:表示存储在multimap中的值(value)的类型
  3. Compare:表示用于比较键的函数对象的类型,默认为less,使用键类型的默认比较函数
  4. Allocator:表示用于分配内存的分配器类型,默认为allocator


3.unordered_map

  • unordered_map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的
  • 与map和multimap不同,unordered_map不会根据键的顺序进行排序,而是使用哈希函数将键映射到存储桶中,这使得unordered_map具有更快的插入,删除和查找操作的时间复杂度,但不保证元素的顺序

unordered_map的定义和结构如下:

template <class Key, class T, class Hash = hash<Key>,
    class KeyEqual=equal_to<Key>,
    class Allocator=allocator<pair<const Key,T>>>
class unordered_map;
  • Key:表示存储在unordered map中的键(key)的类型。
  • T:表示存储在unordered map中的值(value)的类型。
  • Hash:表示用于计算键的哈希值的函数对象的类型,默认为hash,使用键类型的默认哈希函数
  • KeyEqual:表示用于比较键的函数对象的类型,默认为equal_to,使用键类型的默认比较函数
  • Allocator:表示用于分配内存的分配器类型,默认为allocator 

 

  • ### 一般情况下我们更愿意使用复杂度稳定的map而不是unordered map 


4.代码示例

  • map
    #include<iostream>
    #include<map>
    using namespace std;
    int main(){
    	//创建并初始化map
    	map<int,string>myMap={{1,"Apple"},{2,"Banana"},{3,"Orange"}};
    	
    	//插入函数
    	myMap.insert(make_pair(4,"Grapes"));
    	
    	//查找和访问元素
    	cout<<"Value at key 2:"<<myMap[2]<<"\n";
    	
    	//遍历并打印map中的元素
    	for(const auto&pair:myMap){
    		cout<<"Key:"<<pair.first<<",Value:"<<pair.second<<"\n";
    	} 
    	
    	//删除元素
    	myMap.erase(3);
    	
    	//判断元素是否存在
    	if(myMap.count(3)==0){
    		cout<<"Key 3 not found."<<"\n";
    	} 
    	
    	//清空map
    	myMap.clear();
    	
    	//判断map是否为空
    	if(myMap.empty()){
    		cout<<"Map is empty."<<"\n";
    	} 
    	
    	return 0;
    }
  • ### 一般不会手动初始化
  • ### insert那行也可以这样写myMap.insert({Key,Value} 
  • ### 注意myMap[3]=0时,这个count(3)依然是不为0的,因为它的键值对存在,只不过值为0

输出:


  •  multimap
    #include<iostream>
    #include<map>
    using namespace std;
    int main(){
    	//创建并初始化 multimap
    	multimap<int,string>myMultimap={{1,"Apple"},{2,"Banana"},{2,"Orange"}};
    	
    	//插入元素
    	myMultimap.insert(make_pair(3,"Grapes"));
    	
    	//查找和访问元素
    	auto range=myMultimap.equal_range(2);
    	for(auto it=range.first;it!=range.second;++it){
    		cout<<"Key:"<<it->first<<",Value:"<<it->second<<"\n"; 
    	}
    	
    	//遍历并打印multimap中的元素
    	for(const auto&pair:myMultimap){
    		cout<<"Key:"<<pair.first<<",Value:"<<pair.second<<"\n";
    	} 
    	
    	//删除元素
    	myMultimap.erase(2);
    	
    	//判断元素是否存在
    	if(myMultimap.count(2)==0){
    		cout<<"Key 2 not found."<<"\n";
    	} 
    	
    	//清空multimap
    	myMultimap.clear();
    	
    	//判断multimap是否为空
    	if(myMultimap.empty()){
    		cout<<"Multimap is empty."<<"\n";
    	} 
    	
    	return 0;
    } 
  • ### 因为它允许有多个相同键,所以它就不能用[ ]来取出,要用equal_range(Key); //range它表示迭代器的一个范围,range.first就是起始迭代器,range.second就是终止迭代器的下一位

 输出: 


  • unordered_map
#include<iostream>
#include<unordered_map>
using namespace std;
int main(){
	//创建并初始化unordered_map
	unordered_map<string,int>myMap={{"Apple",3},{"Banana",5},{"Orange",2}};
	
	//插入元素 
	myMap.insert(make_pair("Grapes",4)); 
	
	//查找和访问元素
	cout<<"Value for key 'Banana':"<<myMap["Banana"]<<"\n";
	
	//遍历并打印undordered_map中的元素
	for(const auto&pair:myMap){
		cout<<"Key:"<<pair.first<<",Value:"<<pair.second<<"\n";
	}  
	
	//删除元素
	myMap.erase("Orange");
	
	// 判断元素是否存在
	if(myMap.count("Orange")==0){
		cout<<"Key 'Orange' not found."<<"\n";
	} 
	
	//清空undorderd_map
	myMap.clear();
	
	//判断undorderd_map是否为空
	if(myMap.empty()){
		cout<<"Unordered_map is empty."<<"\n";
	} 
	
	return 0; 
} 

输出:

  

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

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

相关文章

在OpenCV基于深度学习的超分辨率模型实践

1. 引言 OpenCV是一个开源的计算机视觉库&#xff0c;拥有大量优秀的算法。基于最新的合并&#xff0c;OpenCV包含一个易于使用的接口&#xff0c;主要用于实现基于深度学习方法的超分辨率&#xff08;SR&#xff09;。该接口包含预先训练的模型&#xff0c;这些模型可以非常容…

vue3路由跳转页面到顶部,Stable Diffusion使用ControlNet

打开新页面时&#xff0c;页面自动回到顶部 在router.js页面添加 router.beforeEach((to, from, next) > {// 在每次导航之前滚动到页面顶部window.scrollTo({top: 0,behavior: smooth // 可选的&#xff0c;使滚动平滑进行});next(); }); Controlnet ControlNet 是用来…

企业计算机服务器中了eking勒索病毒怎么办,eking勒索病毒解密数据恢复

随着计算机网络技术的不断发展与应用&#xff0c;企业的生产运营效率得到了极大提升&#xff0c;但网络安全威胁一直存在&#xff0c;网络威胁的技术也在不断更新&#xff0c;给企业的数据安全带来了严重威胁。在本月&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#…

Windows安装kafka

压缩包下载地址&#xff1a;https://www.apache.org/dyn/closer.cgi?path/kafka/3.6.1/kafka_2.13-3.6.1.tgz 启动kafka步骤 zookeeper-server-start.bat rem 闭命令提示符窗口的命令回显&#xff0c;这样在运行脚本时不会显示脚本的具体命令内容 echo offrem 命令行启动未…

html实现动漫视频网站模板源码

文章目录 1.视频设计来源1.1 主界面1.2 动漫、电视剧、电影视频界面1.3 播放视频界面1.4 娱乐前线新闻界面1.5 关于我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/detail…

【小米电脑管家】安装使用教程--非小米电脑

安装说明功能体验下载资源 Xiaomi HyperOS发布后&#xff0c;小米妙享电脑端独立版本也走向终点&#xff0c;最新的【小米电脑管家】将会内置妙享实现万物互联。那么本篇文章将分享非小米电脑用户如何绕过设备识别验证安装使用【小米电脑管家】实现万物互联 安装说明 1.解压文…

构建外卖系统:使用Django框架

在当今数字化的时代&#xff0c;外卖系统的搭建不再是什么复杂的任务。通过使用Django框架&#xff0c;我们可以迅速建立一个强大、灵活且易于扩展的外卖系统。本文将演示如何使用Django构建一个简单的外卖系统&#xff0c;并包含一些基本的技术代码。 步骤一&#xff1a;安装…

SQL语句---删除索引

介绍 使用sql语句删除索引。由于索引会占用一定的磁盘空间&#xff0c;因此&#xff0c;为了避免影响数据库性能&#xff0c;应该及时删除不再使用的索引。 命令 drop index 索引名 on 表名;例子 删除a表中的singleidx索引&#xff1a; drop index singleidx on a;下面是执…

Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)

目录 一、前言 二、Bean配置信息重用 1.简介 : 2.实例 : 三、关于Bean的创建顺序 1.简介 : 2.实例 : 四、关于Bean的单例和多例 1.简介 : 2.实例 : 五、关于Bean的生命周期 1.简介 : 2.实例 : 六、Bean配置后置处理器 1.简介 : 2.实例 : 七、通过.properties文…

NestJS的微服务实现

1.1 基本概念 微服务基本概念&#xff1a;微服务就是将一个项目拆分成多个服务。举个简单的例子&#xff1a;将网站的登录功能可以拆分出来做成一个服务。 微服务分为提供者和消费者&#xff0c;如上“登录服务”就是一个服务提供者&#xff0c;“网站服务器”就是一个服务消…

Hive SQL间隔连续问题

问题引入 下面是某游戏公司记录的用户每日登录数据, 计算每个用户最大的连续登录天数&#xff0c;定义连续登录时可以间隔一天。举例&#xff1a;如果一个用户在 1,3,5,6,9 登录了游戏&#xff0c;则视为连续 6 天登录。 id dt1001 2021-12-121002 2021-12-12…

Zabbix监控腾讯云VPC

一、简介 私有网络&#xff08;Virtual Private Cloud&#xff0c;VPC&#xff09;是腾讯云上一块由用户自定义的逻辑隔离网络空间&#xff0c;为云服务器、云数据库等资源提供安全可控的网络环境。通过构建逻辑隔离的、用户自定义配置的网络空间&#xff0c;用户能够提升其云…

无参RCE [GXYCTF2019]禁止套娃1

打开题目 毫无思绪&#xff0c;先用御剑扫描一下 只能扫出index.php 我们尝试能不能用php伪协议读取flag php://filter/readconvert.base64-encode/resourceindex.php php://filter/readconvert.base64-encode/resourceflag.php 但是页面都回显了429 怀疑是不是源码泄露 用…

CTF网络安全大赛是干什么的?发展史、赛制、赛程介绍,参赛需要学什么?

CTF&#xff08;Capture The Flag&#xff09;是一种网络安全竞赛&#xff0c;它模拟了各种信息安全场景&#xff0c;旨在提升参与者的网络安全技能。CTF 赛事通常包含多种类型的挑战&#xff0c;如密码学、逆向工程、网络攻防、Web 安全、二进制利用等。 发展史 CTF 的概念…

「Python编程基础」第7章:字符串操作

文章目录 一、回顾二、新手容易踩坑的引号三、转义字符四、多行字符串写法五、注释六、字符串索引和切片七、字符串的in 和 not in八、字符串拼接九、转换大小写十、合并字符串join()十一、分割字符串split()十二、字符串替换 replace()十三、字符串内容判断方法十四、字符串内…

Nginx的性能优化、安全以及防盗链配置

目录 一、nginx的日志分割 二、nginx性能优化之启用epoll模型 三、nginx性能优化之设置worker进程数并与cpu进行绑核 四、nginx性能优化之调整worker的最大打开文件数和最大处理连接请求数量 五、nginx性能优化之启用gzip压缩&#xff0c;提高传输&#xff0c;减少带宽 六…

通俗易懂,什么是.NET Core以及.NET Core能做什么

我们都知道.NET Core是一个可以用来构建现代、可伸缩和高性能的跨平台软件应用程序的通用开发框架。可用于为Windows、Linux和MacOS构建软件应用程序。与其他软件框架不同&#xff0c;.NET Core是最通用的框架&#xff0c;可用于构建各种软件&#xff0c;包括Web应用程序、移动…

HLS实现图像膨胀和腐蚀运算--xf_dilation和xf_erosion

一、图像膨胀和图像腐蚀概念 我们先定义&#xff0c;需要处理的图片为二值化图像A。图片的背景色为黑色&#xff0c;即像素值为0。图片的目标色为白色&#xff0c;即像素值为1。 再定义一个结构元S&#xff0c;结构元范围内所有的像素为白色&#xff0c;像素值为1。 1、图像的…

《三十》模块化打包构建工具 Rollup

19的2小时06分钟 Rollup 是一个 JavaScript 的模块化打包工具&#xff0c;可以帮助编译微小的代码到庞大的复杂的代码中&#xff08;例如一个库或者一个应用程序&#xff09;。 Rollup 和 Webpack 的区别&#xff1a; Rollup 也是一个模块化的打包工具&#xff0c;但是它主要…

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…