【C++】map容器

news2024/10/6 6:50:26

更明确的类型重命名规则using

在C语言中typedef将一个变量提升为一种类型:

	typedef int * p;//p是int*类型

	//int Array[10];//Array是一个可装10个int类型变量的数组。
	typedef int Array[10];//Array是一个可装10个int类型变量的数组的类型
	//Array arr;
	//sizeof(Array)//40

在C++中提供了更明确的类型重命名规则using

上面两种类型重命名可以改成:

using p = int*;
using Array = int[10];

using可以很方便的定义两种类型的集合,如下,将My_Pair的键值对两个类型定义成一个value_type。

template<class _T1, class _T2>
struct My_Pair
{
	using first_type = _T1;
	using second_type = _T2;
	first_type first;
	second_type second;
};

template<class _Key, class _Ty>
class My_Map
{
public:
	using value_type = My_Pair<_Key, _Ty>;
	value_type data;
};

        value_type是两种类型的集合,使用时给两个类型。

My_Map<string, int>simap;

map容器

        map是C++ STL库中的一个关联式容器,其元素是一对键值对(key-value),可通过键查找值。其中,键和值可以是任意类型,但键必须是唯一的。map中的元素按照键的大小自动排序,因此可以快速地查找、插入和删除元素。map是一个非常常用的容器,常用于需要按照键进行查找的场合。

         map的底层是红黑树, 红黑树具有良好的效率,它可在 O(logN) 时间内完成查找、增加、删除等操作。红黑树是一种接近平衡的二叉树。

        map里面存的是pair,pair有first键和second值两个成员。

创建一个map容器

map<string, int> simap;


/*这样写更方便*/
using NAMap = map<string, int>;
NAMap sm;	//创建容器
sm.insert(NAMap::value_type("xiaoming", 20));//插入数据

插入数据

方法一insert

        容器名.insert(map<键类型,值类型>::value_type(键,值));

	// 类型加括号,调用构造函数
	simap.insert(map<string, int>::value_type("xiaoming", 20));
	//map不允许关键码重复
	simap.insert(map<string, int>::value_type("小红", 20));
	simap.insert(map<string, int>::value_type("小华", 20));

方法二operator[]

        输入的数据放到红黑树中,若红黑树有name(name输入重复了),用age替换原有的;没有,建立结点key = name,val = age;

string name;
int age;
while (cin >> name >> age, name != "end")	
{
	simap[name] = age;//重载[]直接赋值
	for (auto& x : simap)//输出数据
	{
		cout << x.first << " " << x.second << endl;
	}	
}

输出map中的数据

方法一:范围for

        auto根据实际值推演出变量类型,const防止值被修改,&引用赋值不构建将亡值更快。

	for (const auto& x : simap)//范围for
	{
		cout << x.first << " " << x.second << endl;
	}

方法二:迭代器iterator输出

        创建map迭代器指向map中第一个值

	map<string, int>::iterator it = simap.begin();

也可以用auto自动识别map的类型创建迭代器auto it = simap.begin();//这样写更方便

for (; it != simap.end(); it++)
{
	cout << it->first << " " << it->second << endl;
}

用键查询值

string name;
while (cin >> name, name != "end")
{
	try
	{
		auto x = simap.at(name);//at()相当于数组下标,但是比[]更安全
		cout << typeid(x).name() << endl;//运行时类型识别RTTI,输出类型
		cout << x << endl;//输出值
	}
	catch (std::out_of_range& e)//捕获超出范围的异常
	{
		cout << e.what() << endl;
	}
}

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

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

相关文章

[golang 微服务] 1.单体式架构以及微服务架构介绍

一.单体架构 在了解微服务之前首先看看单体架构,单体架构在 中小企业内部用的是非常多的&#xff0c;当 业务不复杂&#xff0c; 团队规模不大的时候&#xff0c;单体架构比微服务架构具有 更高的生产率,比如2017年前的淘宝都是单体架构 单体架构的程序部署在单台服务器 这种架…

计算机网络考试多选题汇总Ⅱ

https://cadyin.blog.csdn.nethttps://blog.csdn.net/qq_38639612?spm1010.2135.3001.5421 计算机网络考试多选题汇总 1、在Windows中&#xff0c;任务管理器的作用是() A&#xff0e;终止未响应的应用程序 B&#xff0e;终止进程的运行 C&#xff0e;查看系统当前的信息 …

Springboot服务端接口公网远程调试,并实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

Hybrid Shuffle 测试分析和使用建议

摘要&#xff1a;Apache Flink 社区在 1.16 版本引入了 Hybrid Shuffle Mode [1]&#xff0c;它是传统的 Batch Shuffle 和 Pipelined Shuffle 的结合&#xff0c;让 Flink 批处理具备了更强大的能力。Hybrid Shuffle 的核心思想是打破调度约束&#xff0c;根据可用资源的情况来…

vue 获取url地址的参数

url是一个 URL地址&#xff0c;我们在使用 vue的时候&#xff0c;经常需要获取 url的参数&#xff0c;获取方法有很多种&#xff0c;这里我只介绍一种获取 url参数的方法&#xff0c;那就是使用 Requests. urlset. newContext &#xff08;&#xff09;方法。 这个方法就是调用…

华为OD机试真题B卷 Java 实现【内存资源分配】

一、题目描述 有一个简易内存池&#xff0c;内存按照大小粒度分类&#xff0c;每个粒度有若干个可用内存资源&#xff0c;用户会进行一系列内存申请&#xff0c;需要按需分配内存池中的资源&#xff0c;返回申请结果成功失败列表。 分配规则如下&#xff1a; 分配的内存要大…

论文浅尝 | 大规模知识图谱中的知识图谱补全和多跳推理

笔记整理&#xff1a;刘健宇&#xff0c;东南大学硕士&#xff0c;研究方向为知识图谱规则学习与推理 链接&#xff1a;https://dl.acm.org/doi/abs/10.1145/3534678.3539405 动机 知识图谱(KG) 以头-关系-尾三元组的形式捕获知识&#xff0c;是许多人工智能系统中的重要组成部…

chatgpt赋能python:Python文件另存为教程:让文件保存到你想要的地方

Python 文件另存为教程&#xff1a;让文件保存到你想要的地方 最近&#xff0c;我看到有人在问如何使用Python来另存文件。对于许多初学者或非技术人员来说&#xff0c;这可能看起来很困难&#xff0c;但实际上&#xff0c;Python 提供了一些非常简单的方法来达到这一目的。下…

产品发布+联合演讲+认证+奖项丨云和恩墨在openGauss Developer Day 2023主论坛大放异彩...

openGauss Developer Day 2023 5月26日&#xff0c;一场数据库开发者年度盛会「openGauss Developer Day 2023」在北京昆泰嘉瑞文化中心成功召开。大会汇聚产学研用各界知名专家分享 openGauss 社区的技术创新、优秀实践和生态成果&#xff0c;吸引了线上线下数千名开发者、技术…

大手笔!微软一口气发布了 3 款开发者工具。。

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 昨天我发了一篇 Build 大会相关的生产力产品&#xff0c;介绍了未来 Windows 将集成的一系列 AI 特性&#xff0c;以及如何帮助人们更好的利用 AI&#xff0c;辅助完成各类繁琐的工作。 今…

Go1.21 速览:正式结束对 macOS 10.13 和 10.14 的支持

大家好&#xff0c;我是煎鱼。 根据 Go 语言的版本发布规律&#xff0c;一般是 2 月份和 8 月份各会发布一个新的版本。当前是 Go1.20。也就是在 8 月份会发布 Go1.21 这一个新版本。 在这个新版本&#xff0c;将会正式的结束对 macOS 10.13 和 10.14 的支持&#xff0c;并禁用…

27 VueComponent 计算属性的实现

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 用例如下, 我们这里核心关注 counterPlus100 这个计算变量 问…

JavaScript键盘事件

目录 一、keydown&#xff1a;按下键盘上的任意键时触发。 二、keyup&#xff1a;释放键盘上的任意键时触发。 三、keypress&#xff1a;在按下并释放能够产生字符的键时触发&#xff08;不包括功能键等&#xff09;。 四、input&#xff1a;在文本输入框或可编辑元素的内容…

pytroch实战12:基于pytorch的网络结构可视化

基于pytorch的网络结构可视化 前言 ​ 之前实现了一些常见的网络架构&#xff0c;但是有些网络架构并没有细说&#xff0c;并且网络传输过程中shape的变化也很少谈及过。 ​ 除此之外&#xff0c;前面的实现很少涉及到可视化的内容&#xff0c;比如损失值的可视化、网络结构的…

MySQL的下载、安装、配置(图文详解)

MySQL的下载、安装、配置&#xff08;图文详解&#xff09; 一、MySQL的4大版本二、软件的下载三、MySQL8.0 版本的安装四、配置MySQL8.0五、配置MySQL8.0 环境变量六、MySQL5.7 版本的安装、配置七、安装失败问题 一、MySQL的4大版本 MySQL Community Server 社区版本&#xf…

专高六第一次项目答辩学到的知识点【未完成】

目录标题 1、animation和traslation定义动画的区别&#xff1f;2、微信小程序的支付流程&#xff1f;3、canvas和svg有什么区别&#xff1f;4、app自定义导航栏&#xff0c;如果说打包成小程序导航栏如何适配&#xff1f;4、express权限&#xff0c;接口权限&#xff1f;5、一键…

如何在Linux系统安装Nginx

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面…

设计思维及在Thoughtworks的应用

图&#xff1a;史江鸿 第一次听到"设计思维"是在2016年&#xff0c;那时我刚加入Thoughtworks。我总能在各种场合听到这个词&#xff0c;似乎它在Thoughtworks具有不可撼动的地位。然而&#xff0c;作为QA角色&#xff0c;我并没有机会深入了解它。 我曾感到疑惑&…

2-python的变量类型

内容提要 主要介绍了python中的变量类型&#xff0c;之前不经常用的点有&#xff1a; 列表的下标可以是负数&#xff0c;无论正负&#xff0c;都是从左侧开始&#xff0c;从左到右依次递增。 还有截取操作[头:尾:步长)&#xff0c;表示连接&#xff0c;*表示重复。 列表与元组…

springboot+vue地方废物回收机构管理(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的地方废物回收机构管理。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1…