【C++】STL 容器 - map 关联容器 ③ ( map 容器常用 api 操作 | map 容器迭代器遍历 | map#insert 函数返回值处理 )

文章目录

  • 一、map 容器迭代器遍历
    • 1、map 容器迭代器
    • 2、代码示例
  • 二、map 容器插入结果处理
    • 1、map#insert 函数返回值处理
    • 2、代码示例





一、map 容器迭代器遍历



1、map 容器迭代器


C++ 语言中 标准模板库 ( STL ) 的 std::map 容器 提供了 begin() 成员函数 和 end() 成员函数 , 这两个函数 都返回一个迭代器 , 指向容器中的元素 ;

  • std::map#begin() 成员函数 : 该函数返回指向容器中第一个元素的迭代器 ; 对于std::map 容器来说 , 该元素是按键排序后的第一个键值对 ; 如果 map 容器为空 , 则返回的迭代器就是 末尾迭代器 ;
  • std::map#end() 成员函数 : 该函数返回指向容器末尾位置的迭代器 , 末尾位置实际上并不包含任何元素 , 而是作为遍历结束的标志 ; 如果通过 end() 末尾迭代器来访问元素直接崩溃退出 ;

迭代器指向的 map 容器元素说明 : std::map 容器是一个关联容器 , 它存储的元素按键值自动排序 ; 每个元素是一个键值对 对组对象 , 即 std::pair<const Key, T> 类型对象 , 其中 Key 是键类型,T 是值类型 ;


2、代码示例


代码示例 :

#include "iostream"
using namespace std;
#include "map"
#include "string"int main() {// 创建一个空的 map 容器,键为 string 类型,值为 int 类型map<string, int> myMap;   // 插入元素myMap.insert(pair<string, int>("Tom", 18));//容器的遍历cout << "遍历容器 :" << endl;for (map<string, int>::iterator it = myMap.begin(); it != myMap.end(); it++){cout << it->first << "\t" << it->second << endl;}cout << "遍历结束" << endl;// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
};

执行结果 :

遍历容器 :
Tom 18
遍历结束
请按任意键继续. . .

在这里插入图片描述





二、map 容器插入结果处理



1、map#insert 函数返回值处理


map#insert 函数原型如下 , 其 返回值是 pair<iterator, bool> 类型 的 , 通过判定 pair 对组的第二个值来确定插入是否成功 ;


map#insert 函数原型 :

pair<iterator, bool> insert(const value_type& value);
  • 参数解析 :
    • 参数类型 : value_type 是 map 容器中存储的元素的类型 , 具体类型为 pair<const Key, T> 类型 , Key 是键的类型 , T 是值的类型 ;
    • 参数对象 : 传入的 value 对象 就是一个 pair 对组对象 , 是一个 键值对 元素 ;
  • 返回值解析 : 返回值类型为 pair<iterator, bool> , 也是一个 pair 对组对象 ;
    • 返回值对组的 第一个值是 iterator 迭代器 , 指向已经插入的 键值对 元素 ;
    • 返回值对组的 第二个值是 布尔值 , 表示插入是否成功 ,
      • 如果键 Key 已经存在 , 则插入失败 , 返回 false ;
      • 如果键 Key 不存在 , 则插入新元素 , 返回 true ;

下面的代码中 , map 容器的类型是 map<string, int> , 其迭代器类型是 map<string, int>::iterator , map#insert 函数的返回值是 迭代器类型 和 bool 值组成的键值对 , 该 map 容器对应的 insert 函数返回值是 pair<map<string, int>::iterator, bool> 类型 ;

    // 创建一个空的 map 容器,键为 string 类型,值为 int 类型map<string, int> myMap;   // 插入键值对 ("Tom", 18)myMap.insert(pair<string, int>("Tom", 18));

使用返回值接收上述 insert 函数插入 键值对元素 , 接收变量为 pair<map<string, int>::iterator, bool> insertRet ;

    // 创建一个空的 map 容器,键为 string 类型,值为 int 类型map<string, int> myMap;   // 插入键值对 ("Tom", 18)// 返回值类型为 pair<map<string, int>::iterator, bool>pair<map<string, int>::iterator, bool> insertRet = myMap.insert(pair<string, int>("Tom", 18));

上述返回的值类型为 pair<map<string, int>::iterator, bool> ,

使用 insertRet.first 可以访问 上述 键值对的 map<string, int>::iterator 迭代器值 ,

使用 *(insertRet.first) 可以访问到 map<string, int> 的键值对单个元素 pair<string, int> 对象 ,

使用 insertRet.first->first 可以访问 键值对元素的 键 Key ,

使用 insertRet.first->second 可以访问 键值对元素的 值 Value ;


2、代码示例


代码示例 :

#include "iostream"
using namespace std;
#include "map"
#include "string"int main() {// 创建一个空的 map 容器,键为 string 类型,值为 int 类型map<string, int> myMap;   // 插入键值对 ("Tom", 18)// 返回值类型为 pair<map<string, int>::iterator, bool>pair<map<string, int>::iterator, bool> insertRet = myMap.insert(pair<string, int>("Tom", 18));// 判定插入是否成功if (insertRet.second != true) {cout << "(Tom, 18)插入失败" << endl;} else {cout << "(Tom, 18)插入成功 : " << insertRet.first->first << "\t" << insertRet.first->second << endl;}// 插入键值对 ("Tom", 12)insertRet = myMap.insert(make_pair("Tom", 12));// 判定插入是否成功if (insertRet.second != true) {cout << "(Tom, 12)插入失败" << endl;}else {cout << "(Tom, 12)插入成功 : " << insertRet.first->first << "\t" << insertRet.first->second << endl;}//容器的遍历cout << "遍历容器 :" << endl;for (map<string, int>::iterator it = myMap.begin(); it != myMap.end(); it++){cout << it->first << "\t" << it->second << endl;}cout << "遍历结束" << endl;// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
};

执行结果 :

(Tom, 18)插入成功 : Tom 18
(Tom, 12)插入失败
遍历容器 :
Tom 18
遍历结束
请按任意键继续. . .

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于发展模式加入变量的问题解决

问题1描述&#xff1a; 编译的时候不报错&#xff0c;但是在运行的时候出错输出 FLDLST: ustar in fincl( 17 ) not found ENDRUN: called without a message string 问题1解决&#xff1a; 这是因为在cas-esm 的atm_in 中写入了某个变量&#xff0c;但是在F90 代码里面没…

MODIS ET 蒸散发数据

MODIS ET 即 MOD16 系列产品&#xff0c;属于MODIS Level4 的产品。 在 LP DAAC - MODIS 上搜索了现存的 ET&#xff08;Evapotranspiration&#xff09; 数据&#xff1a; 建议使用最新版本Collection 6.1&#xff0c;也就是结尾是.061的数据集。 在 Collection 6.1 中&…

旅游平台网页前后端

功能清单 游客功能 用户注册、登录登录权限拦截按名称搜索房间支付流程查看订单信息和状态评论预定过的房间&#xff0c;并自动修改订单状态查看统计剩余房间数量&#xff0c;数量为0时不可预定 管理员功能 房间分类管理 类型的删除、修改、查询&#xff08;准备添加增添功能…

数据库中的时间和前台展示的时间不一样,如何保存日期格式的数据到数据库? 如何展示数据库的日期数据到前台

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; ✈️公众号 | 热爱技术的小郑 文章底部有个人公众号二维码。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G 教程资料…

Springboot整合Elasticsearch 7.X 复杂查询

这里使用Springboot 2.7.12版本&#xff0c;Elasticsearch为7.15.0。 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> yaml文件配置…

CGAL的空间排序

1、介绍 许多在CGAL中实现的几何算法都是增量的&#xff0c;因此它们的速度取决于插入顺序。此软件包提供了排序算法&#xff0c;可以大大提高此类算法的运行时间。 其基本原理是沿着空间填充曲线对对象进行排序&#xff0c;这样在插入顺序上&#xff0c;几何上接近的两个对象将…

详解协方差矩阵,相关矩阵,互协方差矩阵(附完整例题分析)【2】

目录 一. 写在前面 二. 相关矩阵&#xff08;Correlation Matrix&#xff09; 三. 实战分析 例题1 &#xff08;1&#xff09;均值的关系 &#xff08;2&#xff09;协方差的关系 &#xff08;3&#xff09;小结 例题2 小结 四. 补充 一. 写在前面 有关协方差矩阵和…

学习Vue单文件组件总结

今天主要学习了组件实例对象的一个重要内置关系和单文件组件。先说一下实例对象的内置关系&#xff0c;在这里要对JS中的原型链有一定的基础&#xff0c;Vue构造函数的prototype原型指向的是Vue的原型对象&#xff0c;new出来的Vue实例对__proto__同样指向的是Vue的原型对象&am…

云计算复习提纲

第一章 大数据的概念&#xff1a;海量数据的规模巨大到无法通过目前主流的计算机系统在合理时间内获取、存储、管理、处理并提炼以帮助使用者决策 大数据的特点&#xff1a;①数据量大&#xff0c;存储的数据量巨大&#xff0c;PB级别是常态&#xff1b;②多样&#xff0c;数…

Friedman检验及后续Nemenyi检验可视化

文章目录 Friedman 检验Nemeny检验 合作推广&#xff0c;分享一个人工智能学习网站。计划系统性学习的同学可以了解下&#xff0c;点击助力博主脱贫( •̀ ω •́ )✧ Friedman 检验 弗里德曼检验&#xff08;Friedman test&#xff09;是一种非参数统计检验方法&#xff0c;用…

OSG读取和添加节点学习

之前加载了一个模型&#xff0c;代码是&#xff0c; osg::Group* root new osg::Group(); osg::Node* node new osg::Node(); node osgDB::readNodeFile("tree.osg"); root->addChild(node); root是指向osg::Group的指针&#xff1b; node是 osg:…

[笔记] GICv3/v4 ITS 与 LPI

0. 写在前面 由于移植一个 pcie 设备驱动时&#xff0c;需要处理该 pcie 设备的 msi 中断(message signaled interrup)。 在 ARM 中&#xff0c; ARM 建议 msi 中断实现方式为&#xff1a; pcie 设备往 cpu 的一段特殊内存&#xff08;寄存器&#xff09;写某一个值&#xff0…