前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】STL 容器 - map 关联容器 ③ ( map 容器常用 api 操作 | map 容器迭代器遍历 | map#insert 函数返回值处理 )

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

作者头像
韩曙亮
发布2024-01-02 09:56:56
7000
发布2024-01-02 09:56:56
举报
文章被收录于专栏:韩曙亮的移动开发专栏
文章目录
  • 一、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、代码示例

代码示例 :

代码语言:javascript
复制
#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 函数原型 :

代码语言:javascript
复制
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> 类型 ;

代码语言:javascript
复制
    // 创建一个空的 map 容器,键为 string 类型,值为 int 类型
    map<string, int> myMap;   

	// 插入键值对 ("Tom", 18)
	myMap.insert(pair<string, int>("Tom", 18));

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

代码语言:javascript
复制
    // 创建一个空的 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、代码示例

代码示例 :

代码语言:javascript
复制
#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 遍历结束 请按任意键继续. . .

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、map 容器迭代器遍历
    • 1、map 容器迭代器
      • 2、代码示例
      • 二、map 容器插入结果处理
        • 1、map#insert 函数返回值处理
          • 2、代码示例
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档