前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】STL 容器 - map 关联容器 ② ( map 容器常用 api 操作 | 容器插入元素操作 - map#insert 函数 | 插入 / 修改 元素操作 - operator[] )

【C++】STL 容器 - map 关联容器 ② ( map 容器常用 api 操作 | 容器插入元素操作 - map#insert 函数 | 插入 / 修改 元素操作 - operator[] )

作者头像
韩曙亮
发布2024-01-02 09:56:25
2810
发布2024-01-02 09:56:25
举报
文章被收录于专栏:韩曙亮的移动开发专栏
文章目录
  • 一、map 容器插入元素操作 - map#insert 函数
    • 1、函数原型简介
    • 2、pair 键值对初始化方式
  • 二、map 容器 插入 / 修改 元素操作 - map#operator[] 函数
  • 三、代码示例 - map 容器插入 / 更新元素
    • 1、代码示例
    • 2、执行结果

一、map 容器插入元素操作 - map#insert 函数


1、函数原型简介

在 C++ 语言 标准模板库 ( STL , Standard Template Library ) 的 std::map 容器 的 insert 函数 可以 向 map 中插入一个键值对 ;

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 ;

2、pair 键值对初始化方式

在上面的章节中提到 , 调用 map#insert 函数 向 map 容器中插入 键值对元素 , 需要 创建一个 pair<const Key, T> 键值对对象 作为 参数 ;

在 C++ 语言中 , std::pair 类是一个模板类 , 用于存储两个可能不同类型的对象作为一个对组 , 又可以成为键值对 , 第一个对象是 键 Key , 第二个对象是 值 Value ;

以下是创建 std::pair 实例对象的几种方式 :

① 使用默认构造函数 : 下面的 myPair 对组中 , 第一个对象是 字符串类型 , 第二个对象是 int 类型 , 使用默认值初始化 ;

代码语言:javascript
复制
std::pair<string, int> myPair;

② 直接初始化 : 在构造函数中 传入 键值对 的对象值 作为 函数参数 , 直接初始化带值的 pair 对组对象 ;

代码语言:javascript
复制
std::pair<string, int> myPair("Tom", 18);

代码示例 :

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

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

③ 直接初始化 : 在构造函数中的 初始化列表 中 传入 键值对 的对象值 , 直接初始化带值的 pair 对组对象 ; 注意 只有在 C++11 以上的版本才能这么用 ;

代码语言:javascript
复制
std::pair<string, int> myPair{"Tom", 18};

④ 调用 make_pair 创建 : 调用 std::make_pair 函数 , 创建 pair 对组对象 ; 下面还是用了类型自动推导 , 真实类型为 std::pair<string, int> ;

代码语言:javascript
复制
auto myPair = std::make_pair("Tom", 18);

代码示例 :

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

    // 插入键值对 ("Jerry", 12)
    myMap.insert(make_pair("Jerry", 12));

二、map 容器 插入 / 修改 元素操作 - map#operator[] 函数


上面的章节中介绍了使用 std::map#insert 函数 插入元素 , 这种插入元素的方式有个弊端 , 就是 如果 键 Key 已经存在 , 则会出现插入失败的情况 ;

这里介绍一种新的插入方式 , 使用 数组下标 的方式进行插入 , 下面的这种插入方式 , 如果键 “Tom” 不存在 , 则正常插入元素 , 如果该键存在 , 则更新元素的 Value 值 ;

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

    // 插入键值对 ("Tom", 19), 修改键值对
    myMap["Tom"] = 19; 

上述的用法实际上是 调用了 重载 [] 操作符函数 , 该重载操作符函数原型如下 :

代码语言:javascript
复制
std::map<Key, T>& operator[](const Key& key);  

上述 函数原型 中的 Key 是 map 关联容器 中键值对元素的 键 类型 , T 是 键值对元素的 值 类型 ;

  • 如果给定的 参数 key 已经存在于 map 关联容器中 , 则更新该 key 对应的 Value 值 , 并返回对应键的值的引用 ;
  • 如果给定的 参数 key 不存在于 map 关联容器中 , 则会在 map 容器中插入一个新的键值对 , 并返回这个新插入的值的引用 ;

注意 : 下面的代码中 , 向 map 容器插入 键值对 , 不是直接插入的 , 而是 先为 “Tom” 键 的对应 int 类型值 默认构造一个默认值 0 , 然后再将 要插入的 19 值 赋值过去 , 这里要执行两个步骤 ;

代码语言:javascript
复制
    // 插入键值对 ("Tom", 19), 修改键值对
    myMap["Tom"] = 19; 

三、代码示例 - map 容器插入 / 更新元素


1、代码示例

代码示例 :

代码语言:javascript
复制
#include "iostream"
using namespace std;
#include "map"
#include "string"


int main() {

    // 创建一个空的 map 容器,键为 string 类型,值为 int 类型
    map<string, int> myMap;   

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

    // 插入键值对 ("Jerry", 12)
    myMap.insert(make_pair("Jerry", 12));

    // 插入键值对 ("Trump", 80)  
    myMap.insert(map<string, int>::value_type("Trump", 80));

    // 插入键值对 ("Tom", 19), 修改键值对
    myMap["Tom"] = 19;   

    // 插入键值对 ("Jack", 15)
    myMap["Jack"] = 15; 
    myMap["Jack"] = 16; 

    // 遍历 map 中的所有元素  
    for (const auto& pair : myMap) {
        cout << pair.first << ": " << pair.second << endl;  
    }


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

2、执行结果

执行结果 :

代码语言:javascript
复制
Jack: 16
Jerry: 12
Tom: 19
Trump: 80
请按任意键继续. . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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