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

成都网站建设爱特通建e网室内设计网怎么用

成都网站建设爱特通,建e网室内设计网怎么用,计算机前端培训,织梦dedecms官网前引: 在C编程中,高效管理数据是提升代码性能的关键。std::map作为标准模板库(STL)的核心容器之一,提供了一种基于红黑树的有序键值对存储机制,能够实现快速的查找、插入和删除操作。无论是构建配置系统、实…

前引: 在C++编程中,高效管理数据是提升代码性能的关键。std::map作为标准模板库(STL)的核心容器之一,提供了一种基于红黑树的有序键值对存储机制,能够实现快速的查找、插入和删除操作。无论是构建配置系统、实现缓存机制,还是处理复杂的数据映射,掌握map都能显著优化你的程序效率。本文将带你一步步探索map的基本概念、核心操作、常见应用场景以及性能优化技巧,帮助你从新手快速进阶为实战高手。准备好开启这段高效编程之旅了吗?让我们开始吧!(map的重点:operator【】+ 插入)

目录

【一】map介绍

【二】主要特点

(1)有序存储

(2)键的唯一性

(3)动态大小

(4)迭代器支持

【三】接口学习

(1)默认构造

(2)插入(重点)

(1)间接创建类模板插入

(2)直接使用类模板插入

(3)使用函数模板插入

(4)多参构造隐式转换

(3)迭代器访问

(4)operator 【】(重点)

(1)引入

(2)operator【】

(3)原理剖析

(4)operator【】的运用


【一】map介绍

std::map 是一个关联容器,用于存储键值对(key-value pairs)。它基于红黑树(一种自平衡二叉搜索树)实现,确保元素按键的有序性!

(1)map 存储唯一的键(key)和对应的值(value)。键用于索引值,键必须是唯一的(如果插入重复键,新值会覆盖旧值)

(2)元素按键的升序自动排序

(3)需要包含头文件 <map>,并使用 std::map<KeyType, ValueType> 声明

(4)示例:定义一个 map 存储学生ID(键)和姓名(值),如 std::map<int, std::string> studentMap

通俗理解一个存储映射关系(键-值)数据的关联容器,它需要两个数据类型进行实例化

【二】主要特点

(1)有序存储

元素始终按键排序,遍历时按顺序输出

例如:插入键为 3、1、2 的元素,遍历输出顺序为 1、2、3

(2)键的唯一性

每个键在 map 中是唯一的,如果尝试插入相同的键,会覆盖之前的值

insert 插入相同的键会失败

operator[ ]会进行覆盖

(3)动态大小

自动调整存储空间,无需手动管理

(4)迭代器支持

支持双向(正向 反向)迭代器

【三】接口学习

(1)默认构造

只需要两个数据类型(内置类型、容器类型、自定义类型均可)和变量名即可实例化

map<string, string> V1;map<int, string> V2;map<int, int> V3;
(2)插入(重点)

map 的插入不同于以往学习的所有容器的操作:每次插入都涉及到 pair 的使用

原因:这种关联映射型的容器存储,需要 pair(类模板)或者 make_pair(函数模板)提供             一种安全、高效的封装方式,可以将 key 和 value合二为一成一个对象!

  • pair:是存储键值对的类型,需要显式指定类型
  • make_pair:是创建pair对象的辅助函数,自动推断类型,简化代码
  • 第一个成员(通常命名为 first)键(key),类型为 const Key(键在map中不可改)
  • 第二个成员(通常命名为 second)值(value),类型为 T(值可以修改)
(1)间接创建类模板插入
map<string, string> V1;//单独创建pair插入
pair<string, string> K1("小明", "大学生");
V1.insert(K1);
(2)直接使用类模板插入
//直接使用pair插入
V1.insert(pair<string, string>("小王", "老师"));
(3)使用函数模板插入
//使用函数模板插入
V1.insert(make_pair("小白", "对象"));
(4)多参构造隐式转换
/多参构造隐式转换V1.insert({ "小二","服务员" });

(3)迭代器访问

我们知道不管是 pair 还是 make_pair 为了高效、方便,将 key 和 value 合二为一转为一个对象

既然插入的是一个 pair 对象,那么访问数据也应该拿到是 pair 类型,所以我们需要分别打印:

map<string, string>::iterator it = V1.begin();
while (it != V1.end())
{cout << (*it).first << " " << (*it).second << endl;//或者//cout << it->first << " " << it->second << endl;it++;
}

(4)operator 【】(重点)
(1)引入

如下假如现在有几个字符串,我们需要统计每种字符串出现的个数:

string arr[] = { "西瓜","黄瓜","哈密瓜","哈密瓜","西瓜" };

如果用 map 的思维,我们可以这么写:

for (const auto& e : arr)
{//先看这个字符串是否已经存在auto it = V.find(e);//如果不存在if (it == V.end()){//插入V.insert(make_pair(e, 1));}else{it->second++;}
}

效果展示:

(2)operator【】

如果我们用 operator[ ]可以简写为:

这是为何?下面我们开始原理剖析

(3)原理剖析

首先我们看 【】的设定:

可以看到它的底层是 insert ,那么我们看看 insert 的返回值:

这里就不去繁琐的推论了,我们直接说结论:

(1)首先operator【】接收 key 会先调用 insert 进行插入 pair<key,V()>,这里的 value 给           的是缺省值,比如 int 类型的缺省为0

(2)bool会根据是否已经存在 key 接收true或者false

(3)将这个 key 和 value 利用打包成一个对象 pair<iterator,bool>

(4)最后返回这个插入/原来对象的 iterator->second,即这个对象的value

(4)operator【】的运用
V1.insert(make_pair("小一", "大学生"));
V1.insert(make_pair("小二", "老师"));//查找+读
cout << V1["小一"] << endl;
//插入
V1["小三"];
//修改
V1["小二"] = "对象";
//插入+修改
V1["小四"] = "兄弟";

http://www.dtcms.com/a/488489.html

相关文章:

  • beanFactory快速入门
  • 提供企业网站建设公司千万pv网站开发成本
  • delphi 做直播网站百度营销后台
  • 做php网站前端价格泉州有那些网站建设公司
  • nginx做网站政务网站建设工作方案
  • 素材网站整站下载做网站运营有前途
  • 济南正规网站建设公司哪家好网站付费模板
  • Object类详解--finalize
  • 烟台企业网站制作公司宜昌网络推广公司
  • 网站建设服务合同缴纳印花税吗怎么做电影网站吗
  • 一般网站建设步骤如何更好的建设和维护网站
  • 自己做网站练手网站空间不支持php
  • 批量扫dedecms做的网站wordpress 找源码
  • 地方门户网站app网站怎样做银联支付接口
  • 10.14 数论
  • 厦门网站制作企业东营做网站公司
  • 网站备案查询工信部官网wordpress 显示excel
  • 作业2025 10.15
  • 专题网站建设意义何在常见网站建设公司术语
  • 网站建设的客户在哪里做网站的天空网
  • LeetCode 3350.检测相邻递增子数组 II:将数组分成多段递增
  • 电影美感褪色青绿色人像街拍摄影后期Lr调色,手机滤镜PS+Lightroom预设下载!
  • seo网站设计工具下载网站系统源码
  • 网站设计软件培训怎么样新野微网站开发
  • 机器学习入门,无监督学习之DBSCAN聚类算法完全指南:面向Java开发者的Python实现详解
  • 哪些网站推广不收费网站设计 原型图
  • yolo v8n模型小样本微调总结
  • 网站制作 呼和浩特南山网站设计方案
  • 如何做家居网站注册公司一年需要多少费用
  • 专门做酒店设计的网站网页设计参考网站