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

news/2025/4/1 2:51:12/

文章目录

  • 一、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.ppmy.cn/news/1288652.html

相关文章

ORACLE Primavera Unifier v23.12 最新虚拟机(VM)分享下载

引言 根据上周的计划&#xff0c;我近日简单制作了一个基于ORACLE Primavera Unifier 最新版23.12的虚拟机演示环境&#xff0c;里面包括了unifier的全套系统服务 此虚拟系统环境仅用于演示、培训和测试目的。如要在生产环境中使用此虚拟机&#xff0c;请您与Oracle 销售代表联…

大数据背后的绿色收割:基于Hadoop的农产品价格信息智能分析

大数据背后的绿色收割&#xff1a;基于Hadoop的农产品价格信息智能分析 引言正文1. 数据获取与准备2. 数据清洗与处理3. Hadoop数据分析引擎的运用4. MySQL数据库的集成5. 创新性的可视化6. 结论与展望 结语 引言 随着信息技术的不断发展&#xff0c;农业领域也在数字化的浪潮…

三个算法题之---bjtu算法期末小测验

链接地址&#xff1a;https://algo.bjtu.edu.cn/contest?groupmy 题目1&#xff1a;Problem A. 加分二叉树 时间限制 1000 ms 内存限制 128 MB 题目描述设一个n个节点的二叉树tree的中序遍历为&#xff08;l,2,3,⋯,n&#xff09;&#xff0c;其中数字1,2,3,⋯,n为节点编号。每…

基于Spring Boot的美妆分享系统:打造个性化推荐、互动社区与智能决策

基于Spring Boot的美妆分享系统&#xff1a;打造个性化推荐、互动社区与智能决策 1. 项目介绍2. 管理员功能2.1 美妆管理2.2 页面管理2.3 链接管理2.4 评论管理2.5 用户管理2.6 公告管理 3. 用户功能3.1 登录注册3.2 分享商品3.3 问答3.4 我的分享3.5 我的收藏夹 4. 创新点4.1 …

【漏洞复现】冰峰VPN存在敏感信息泄露漏洞

漏洞描述 冰峰VPN log/system.log模块日志信息泄露漏洞 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利…

MATLAB基础:从入门到熟悉

二十分钟快速入门Matlab Matlab是一款功能强大的建模软件&#xff0c;它在科学和工程领域被广泛使用。如果你已经具备一些计算机语言的基础知识&#xff0c;那么掌握Matlab的基础语法将会非常容易。下面我将用简单的语言给你介绍Matlab最常用的基础语法。 1、变量和赋值&#…

react怎么实现跨页面传参

在React中&#xff0c;可以使用路由参数、路由状态管理、Context API和本地存储等方式来实现跨页面传参。下面分别介绍这几种方法&#xff1a; 1、路由参数 在React Router中&#xff0c;可以通过路由参数来传递数据。在定义路由时&#xff0c;可以使用动态路由参数来接收参数…

【Spring实战】16 Profile

文章目录 1. 定义2. 使用2.1 定义 Profile2.2 激活 Profile 3. 演示3.1 properties文件3.2 打印日志3.3 启动服务&验证3.4 修改 active3.5 重启服务&验证 4. 应用场景4.1 数据库配置4.2 日志配置 5. 代码详细总结 Spring 框架提供了一种强大的机制&#xff0c;允许在不…