STL之map

news2024/10/2 1:54:28

目录

map(常用)

map的函数

multimap(几乎不用-时间复杂度不稳定)

mutimap的函数

unordered_map(一般不用)

unordered_map的函数

代码示例

1.map

2、multimap

3、unordered_map


map(常用)

map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的。

map容器根据键来自动排序,并且可以通过键快速查找对应的值。

map容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入、删除和查找操作的时间复杂度O(logn).

map的定义和结构如下:

template<class Key,class T,class Compare = less<key>,
         class Allocator = allocator<pair<const Key,T>>>
class map;

Key:表示存储在map中的键(key)的类型

T:表示存储在map中的值(value)的类型

Compare:表示用于比较键的函数对象的类型,默认为less,使用键类型的默认比较函数。

Allocator:表示用于分配内存的分配器类型,默认为allocator。

map的函数

函数                     功能                                                          时间复杂度

insert                插入元素                                                         O(logn)

erase                删除元素                                                         O(logn)

find                   查找元素                                                         O(logn)

count                统计元素个数                                                  O(logn)

size                  返回元素个数                                                   O(1)

begin                返回指向容器起始位置的迭代器                      O(1)

end                   返回指向容器末尾位置的迭代器                      O(1)

clear                 清空容器                                                          O(n)

empty               判断容器是否为空                                            O(1)

lower_bound    返回指向第一个不小于指定键的元素位置        O(logn)

upper_bound   返回指向第一个不大于指定键的元素位置         O(logn)

multimap(几乎不用-时间复杂度不稳定)

multimap是一种关联容器,类似于map,但允许存储多个具有相同的键值对(key-value pairs)。

multimap容器根据键来自动排序,并且可以通过键快速查找对应的值。

map容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入、删除和查找操作的时间复杂度。

map的定义和结构如下:

template<class Key,class T,class Compare = less<key>,
         class Allocator = allocator<pair<const Key,T>>>
class multimap;

Key:表示存储在multimap中的键(key)的类型

T:表示存储在multimap中的值(value)的类型

Compare:表示用于比较键的函数对象的类型,默认为less,使用键类型的默认比较函数。

Allocator:表示用于分配内存的分配器类型,默认为allocator。

mutimap的函数

函数                     功能                                                          时间复杂度

insert                插入元素                                                         O(logn)

erase                删除元素                                                         O(logn)

find                   查找元素                                                         O(logn)

count                统计元素个数                                                  O(logn)

size                  返回元素个数                                                   O(1)

begin                返回指向容器起始位置的迭代器                      O(1)

end                   返回指向容器末尾位置的迭代器                      O(1)

clear                 清空容器                                                          O(n)

empty               判断容器是否为空                                            O(1)

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:表示存储在unorder_map中的值(value)的类型

Hash:表示用于计算键的哈希值的函数对象的类型,默认为Hash,使用键类型的默认哈希函数。

KeyEqual:表示用于比较键的函数对象的类型,默认为equal_to,使用键类型的默认比较函数。

Allocator:表示用于分配内存的分配器类型,默认为allocator。

unordered_map的函数

函数                     功能                                              平均时间复杂度        最坏时间复杂度

insert                插入元素                                               O(1)                                O(n)

erase                删除元素                                               O(1)                                O(n)

find                   查找元素                                               O(1)                                O(n)

count                统计元素个数                                        O(1)                                O(n)

size                  返回元素个数                                         O(1)                                O(1)

clear                 清空容器                                                O(1)                                O(1)

empty               判断容器是否为空                                  O(1)                                O(n)

unordered_map拥有极好的平均时间复杂度和极差的最坏时间复杂度,所以他的时间复杂度是不稳定的。

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

代码示例

1.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] << endl;
	//遍历并打印map中的元素
	for (const auto& i : myMap)
	{
		cout << "Key:" << i.first << ",value:" << i.second << endl;
	}
	//删除元素
	myMap.erase(3);
	//判断元素是否存在
	if (myMap.count(3) == 0)
	{
		cout << "key 3 not found" << endl;
	}
	//清空map
	myMap.clear();
	//判断map是否为空
	if (myMap.empty())
	{
		cout << "map is empty" << endl;
	}
	return 0;
}

结果:

2、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 << endl;
	}
	//遍历并打印multimap中的元素
	for (const auto& i : myMultiMap)
	{
		cout << "Key:" << i.first << ",value:" << i.second << endl;
	}
	//删除元素
	myMultiMap.erase(2);
	//判断元素是否存在
	if (myMultiMap.count(2) == 0)
	{
		cout << "key 2 not found" << endl;
	}
	//清空map
	myMultiMap.clear();
	//判断map是否为空
	if (myMultiMap.empty())
	{
		cout << "myMultiMap is empty" << endl;
	}
	return 0;
}

结果:

3、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"] << endl;
	//遍历并打印unordered_map中的元素
	for (const auto& i : myMap)
	{
		cout << "Key:" << i.first << ",value:" << i.second << endl;
	}
	//删除元素
	myMap.erase("Orange");
	//判断元素是否存在
	if (myMap.count("Orange") == 0)
	{
		cout << "key 'Orange' not found" << endl;
	}
	//清空map
	myMap.clear();
	//判断map是否为空
	if (myMap.empty())
	{
		cout << "unordered_map is empty" << endl;
	}
	return 0;
}

结果:

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

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

相关文章

运用3d技术建立数字化模型---模大狮模型网

随着科技的不断进步和发展&#xff0c;3D技术已经被广泛运用于各个领域。其中&#xff0c;建立数字化模型是3D技术的一个重要应用方向。本文将从3D技术的概念、数字化模型的定义、数字化模型的建立方法、应用领域等方面介绍运用3D技术建立数字化模型的相关知识。 一、3D技术的概…

【论文阅读】Non-blocking Lazy Schema Changes in Multi-Version

Non-blocking Lazy Schema Changes in Multi-Version Database Management Systems 1. Intro 1.1 Motivation 一个是online能够提供不停机的更新的能力&#xff0c;在很多业务系统里面是必要的。第二个是满足高可用&#xff0c;SaaS、PaaS要提供高可用的系统给用户&#xff…

你的编程能力什么时候开始有了质的飞跃?

建议看看计算机科学速成课&#xff0c;一门很全面的计算机原理入门课程&#xff0c;短短10分钟可以把大学老师十几节课讲不清楚的东西讲清楚&#xff01;整个系列一共41个视频&#xff0c;B站上有中文字幕版。 每个视频都是一个特定的主题&#xff0c;例如软件工程、人工智能、…

Goby 漏洞发布|用友 NC registerServlet 反序列化远程代码执行漏洞

漏洞名称&#xff1a;用友 NC registerServlet 反序列化远程代码执行漏洞 English Name&#xff1a;Yonyou NC registerServlet Deserialize Remote Code Execute Vulnerability CVSS core: 9.8 影响资产数&#xff1a; 21320 漏洞描述&#xff1a; 用友 NC Cloud 是一种商…

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建

最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事&#xff0c;Google 了 N 篇文章竟然没有一篇是可以跑起来的&#xff01; 少部分教程是给出了自我矛盾的配置&#xff08;是的&#xff0c;按照贴出来的代码和配置&#xff0c;他自己都跑不起来&#xff09;&#xff0c;大部…

AOT-GAN-for-Inpainting项目解读|使用AOT-GAN进行图像修复

项目地址&#xff1a; https://github.com/researchmm/AOT-GAN-for-Inpainting 基于pytorch实现 论文地址&#xff1a; https://arxiv.org/abs/2104.01431 开源时间&#xff1a; 2021年 项目简介&#xff1a; AOT-GAN-for-Inpainting是一个开源的图像修复项目&#xff0c;其对 …

1.12 力扣中等图论

797. 所有可能的路径 - 力扣&#xff08;LeetCode&#xff09; 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节…

apipost 前端使用云端mock实现自定义返回

目录 一.新建接口 1.选择mock环境 2.设置接口路径&#xff0c;以及相关参数 3.自定应响应示例 4.开启云端mock,设置相应条件 5.更改接口类型post,保存设置&#xff0c;发送请求 6.测试 一.新建接口 1.选择mock环境 如图&#xff0c;更改环境 2.设置接口路径&#xff0c…

线程池用法很简单?来看看这些问题能问翻你!

背景 这是张小帅失业之后的第三场面试。 面试官&#xff1a;“实际开发中用过多线程吧&#xff0c;那聊聊线程池吧”。 “有CachedThreadPool:可缓存线程池,FixedThreadPool:定长线程池.......balabala”。小帅暗暗窃喜&#xff0c;还好把这几种线程池背下来了&#xff0c;看…

C++每日一练(15):简单幂计算

题目描述 输入两个数a和b&#xff0c;求a的b次方。 输入 输入两个整数a&#xff0c;b&#xff08;1<a<10&#xff0c;1<b<15&#xff09;。 输出 输出一个正整数&#xff0c;该值<1000000000000。 输入样例 3 3 输出样例 27 参考答案 #include<bits/stdc.h&…

LeetCode刷题:141. 环形链表

题目&#xff1a; 是否独立解答出&#xff1a;否&#xff0c;有思路&#xff0c;但是代码报错&#xff0c;参考解题代码后&#xff0c;修改通过 解题思路&#xff1a;利用循环与哈希表存储每一个节点&#xff0c;如果发现添加不进去说明&#xff0c;存在环&#xff0c;正常来说…

vivado 使用项目摘要、配置项目设置、仿真设置

使用项目摘要 Vivado IDE包括一个交互式项目摘要&#xff0c;可根据设计动态更新命令被运行&#xff0c;并且随着设计在设计流程中的进展。项目摘要包括概览选项卡和用户可配置的仪表板&#xff0c;如下图所示。有关信息&#xff0c;请参阅《Vivado Design Suite用户指南&…

SwiftUI之深入解析布局协议

一、什么是布局协议&#xff1f; 采用布局协议类型的任务&#xff0c;是告诉 SwiftUI 如何放置一组视图&#xff0c;需要多少空间。这类型常常被作为视图容器&#xff0c;虽然布局协议是 2022 年新推出的&#xff08;至少公开来说&#xff09;&#xff0c;但是我们在第一天使用…

[ctf.show 元旦水友赛 2024] crypto

感觉半个多月回家没有打开过电脑了。看到ctf.show上元旦的比赛&#xff0c;才想起似乎应该看看。 月月的爱情故事 上来这就是个小脑洞题&#xff0c;给了一大段文字和一个base64的串。并且提示&#xff1a;试试摩斯吧&#xff01; 从文字上看只有三种标点符号&#xff0c;显…

SpringBoot 配置文件加载优先级

SpringBoot 配置文件加载优先级 前言SpringBoot 配置文件加载优先级 前言 最近在使用k8s部署项目的时候,发现Dockerfile文件中的命令后面跟的参数,无法覆盖nacos中的参数,今天有时间正好来整理一下Springboot配置的加载顺序 SpringBoot 配置文件加载优先级 整理加载顺序第一个肯…

Handsfree_ros_imu:ROS机器人IMU模块的hfi_a9.py文件学习记录

之前的博客写了关于Handsfree_ros_imu&#xff1a;ROS机器人IMU模块ARHS姿态传感器&#xff08;A9&#xff09;Liunx系统Ubuntu20.04学习启动和运行教程&#xff1a; https://blog.csdn.net/qq_54900679/article/details/135539176?spm1001.2014.3001.5502 与Handsfree_ros_…

Python基础知识:整理11 模块的导入、自定义模块和安装第三方包

1 模块的导入 1.1 使用import 导入time模块&#xff0c;使用sleep功能&#xff08;函数&#xff09; import time print("start") time.sleep(3) print("end")1.2 使用from 导入time的sleep功能 from time import sleep print("start") slee…

外汇天眼:塞浦路斯证券交易委员会(CySEC)确认了四家投资公司退出投资者赔偿基金(ICF)会员资格

塞浦路斯证券交易委员会&#xff08;CySEC&#xff09;今天确认了四家投资公司已被取消其在投资者赔偿基金&#xff08;ICF&#xff09;的会员资格。 以下公司不再是ICF的会员&#xff1a; 1.Stone Edge Capital Ltd&#xff08;LEI 213800PZFB9VV8FNWB30&#xff09;&#xf…

Redis的优化

1 Redis的高可用 1.1 高可用的定义 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&…

边缘数据采集网关无法上传数据是什么原因?如何解决?

边缘数据采集网关是物联网系统中的常见设备&#xff0c;主要用途包括数据采集、协议转换、边缘数据处理、数据传输分发等&#xff0c;实现多设备和多系统的互联互通和数据协同应用&#xff0c;对于提高物联网感知和响应效率、加强物联网联动协同能力、提升数据安全性等方面都具…