STL-map/multimap关联式容器

目录

一、基本概念

1.1 简介

1.2 本质

1.3 库原型

二、使用

2.0 迭代器

2.1 构造函数

2.2 插入删除

2.3 查找统计

2.4 数据修改

三、multimap


一、基本概念

1.1 简介

  • map中所有元素都是pair
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
  • 所有元素都会根据元素的键值自动排序
  • map⽀持修改value数据,不⽀持修改key数据

1.2 本质

  • map/multimap属于关联式容器,底层结构是用红黑树实现。

1.3 库原型

Key就是map底层关键字的类型,T是map底层value的类型,map默认要求Key⽀持小于⽐较,如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数,map底层存储数据的内存是从空间配置器申请的。⼀般情况下,我们都不需要传后两个模版参数。

 map底层的红⿊树节点中的数据,使⽤pair<Key, T>存储键值对数据。

二、使用

迭代器、构造函数、增删查都与set类设计使用相似,唯一不同的是,map类支持修改。

2.0 迭代器

// 迭代器是⼀个双向迭代器
//iterator -> a bidirectional iterator to const value_type

// 正向迭代器
iterator begin();
iterator end();

// 反向迭代器
reverse_iterator rbegin();
reverse_iterator rend();

int main()
{map<string, string> dict = { {"left", " 左边"}, {"right", " 右边"},
{"insert", " 插入 "},{ "string", " 字符串" } };//范围forfor (const auto& e: dict){cout << e.first << ":" << e.second << endl;}//迭代器+重载->操作符auto it = dict.begin();while (it != dict.end()){cout << it->first << ":" << it->second << " ";cout << endl;++it;}return 0;
}

2.1 构造函数

// empty (1) ⽆参默认构造
explicit map (const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());// range (2) 迭代器区间构造
template <class InputIterator>
map (InputIterator first, InputIterator last,
const key_compare& comp = key_compare(),
const allocator_type& = allocator_type());// copy (3) 拷⻉构造
map (const map& x);// initializer list (5) initializer 列表构造
map (initializer_list<value_type> il,const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());//赋值操作符重载
map& operator=(const map &mp)

2.2 插入删除

  • insert(elem); //在容器中插入元素。
  • clear(); //清除所有元素
  • erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
  • erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
  • erase(key); //删除容器中值为key的元素。
//插入的四种办法
int main()
{map<string, string> dict;//1. 有名对象pair<string, string> kv1("apple", "苹果");dict.insert(kv1);//2. 匿名对象dict.insert(pair<string, string>("banana", "香蕉"));//3. 函数dict.insert(make_pair("pear", "梨"));//4. C++11支持多参数隐式类型转换dict.insert({ "strawb","草莓" });return 0;
}

2.3 查找统计

  • 查找k ,返回k 所在的迭代器,没有找到返回end()
    iterator find (const key_type& k);
  • 查找k ,返回k 的个数
    size_type count (const key_type& k) const;

2.4 数据修改

第一种也是最容易想的方式就是直接使用迭代器的重载->操作符修改second值

int main()
{map<string, string> dict = { {"left", " 左边"}, {"right", " 右边"},
{"insert", " 插入 "},{ "string", " 字符串" } };//范围forfor (const auto& e : dict){cout << e.first << ":" << e.second << endl;}cout << endl;auto it = dict.find("left");it->second = "不知道";for (const auto& e : dict){cout << e.first << ":" << e.second << endl;}return 0;
}

第二种介绍官方库中支持的[]接口

  • mapped_type实际上就是value,返回其引用,支持修改
  • 实际上分为两种情况:
    1. 如果key存在,返回对应value的引用
    2. 如果key不存在,插入此key值,对应的value值走默认构造
  • 底层分析

    底层调用的是insert

    insert返回值是 pair<iterator,bool>:如果存在就返回已经有的节点的迭代器,bool值为false;如果不存在就返回新建节点的迭代器,bool值为true
  • 由以上分析可见:[]操作符既可以查找、修改也可以插入。
int main()
{map<int, char> mp;mp[1] = 'a';mp[2] = 'b';mp[3] = 'c';mp[4] = 'd';for (const auto& e : mp){cout << e.first << ":" << e.second << endl;}mp[3] = 'x';for (const auto& e : mp){cout << e.first << ":" << e.second << endl;}
}

 

三、multimap

multimap与map的区别与multiset与set的区别一样,具体类比详见:STL-set/multiset关联式容器-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Redis篇(环境搭建)

目录 一、安装包 1. Windows版下载地址 2. Linux版下载地址 二、安装Redis 1. 在Linux中安装Redis 2. 在Windows中安装Redis 3. 细节问题 三、Redis服务启动 1. 默认启动 2. 指定配置启动 3. 开机自启 四、Redis服务停止 1. Linux系统中启动和停止Redis 2. Window…

2024准备去面试软件测试岗,高频面试题预测?

金九银十已经到了&#xff0c;想要找工作&#xff0c;或者是想要跳槽的小伙伴们可要做好准备了&#xff0c;给大家总结了软测面试必问的20到面试题&#xff0c;背完面试不用慌&#xff01; 1.项目测试流程你是怎么开展的&#xff1f; 【参考回答】 首先&#xff0c;需求分析…

tauri程序加载本地图片或者文件在前端页面展示

要想在前端页面中展示本地文件或者文件夹&#xff0c;需要使用convertfilesrc这个api&#xff0c;可以非常方便的展示内容&#xff0c;官方文档&#xff1a;tauri | Tauri Apps convertFileSrc甚至位于invoke之前&#xff0c;但我却一直没有注意到它&#xff0c;一方面是因为&…

【最新华为OD机试E卷-支持在线评测】出租车计费(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

shell中对xargs命令传参进行编辑

以文件解压为例&#xff0c;将当前路径下的所有gz文件解压到同名的log文件中&#xff0c;解压命令如下所示&#xff1a; ls *.gz| xargs -n 1 -P 4 -I {} bash -c zcat "{}" > $(echo "{}" | sed "s/gz$/log/g") 执行结果如下图所示&#x…

物联网网络中集中式与分布式SDN环境的比较分析

论文标题&#xff1a;Comparative Analysis of Centralized and Distributed SDN Environments for IoT Networks 中文标题&#xff1a;物联网网络中集中式与分布式SDN环境的比较分析 作者信息&#xff1a; Khirota G. Yalda, Diyar J. Hamad, Nicolae Tapus罗马尼亚布加勒斯…

KVM 安装 Windows11

在 KVM 安装 Windows 比安装 Ubuntu 会复杂一些&#xff0c;去微软官网下载 Win11&#xff0c;同时要下载 Virtio 可以从 Fedora 下载 &#xff08;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/&#xff09;。 安装Window 命令行输入以下命令&#xf…

YOLOv8-pose+streamlit 实现人体关键点检测/姿态估计系统(后续可用于健身时的姿态估计,训练纠正等....)

人体关键点检测系统 一、安装与配置1.1 安装 Streamlit1.2 配置文件1.3 运行Streamlit应用1.4 找模板 二、人体关键点检测算法2.1 关键点序号2.2 YOLOv8-pose图像推理 三、将YOLOv8-pose算法内置到streamlit中3.1 整体结构3.2 常见问题- RGB通道颠倒- Numpy与OpenCV之间的转换 …

个人信息安全,从这一课(CISAW-PIS)开始!

近年来&#xff0c;我国个人信息保护力度不断加大&#xff0c;个人信息的合法处理、跨境流动和安全保护变得更加复杂和严格。企业和管理者面临着如何执行个人信息保护相关法律、标准规范的挑战&#xff0c;员工则需要有效学习和应用个人信息保护策略&#xff0c;以确保个人信息…

8.11 矢量图层线要素单一符号使用一(简单线)

8.11 矢量图层线要素单一符号使用一(简单线)_qgis标记如何添加简单线-CSDN博客 目录 前言 简单线&#xff08;Simple line&#xff09;符号的使用 QGis中的使用 二次开发代码实现 总结 前言 本章介绍矢量图层线要素单一符号中简单线&#xff08;Simple line&#xff09;…

【Python报错已解决】TypeError: can only concatenate str (not “int“) to str

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Linux-df命令使用方法

Linux-df&#xff08;disk filesystem&#xff09;命令 df 命令是 Unix 和 Linux 系统中用于报告文件系统磁盘空间使用情况的工具。 df [OPTION]... [FILE]...OPTION 常用选项&#xff08;博主一般df -h用的较多&#xff0c;可读性较好&#xff09; -h&#xff1a;以人类可读的…

离散化 ---( 求区间和)

什么是离散化&#xff1f; 离散化是将连续的数值范围映射到有限的、离散的数值集合的过程。在许多情况下&#xff0c;数据可能会存在多个重复值或范围较大的连续值。为了简化处理&#xff0c;尤其是处理区间查询和增量问题时&#xff0c;我们可以将这些值转换为一组有限的、唯一…

如何进行光伏项目卫星踏勘?

一、卫星地图选址 1. 数据获取 卫星踏勘的第一步是获取高分辨率的卫星图像。利用卫星遥感技术&#xff0c;可以获取项目候选区域的地形地貌、植被覆盖等详细信息。这些数据通过专业的遥感图像处理软件进行分析和解译&#xff0c;提取出对光伏电站建设有重要影响的关键因素&am…

如何同时使用多个Craigslist账户而不被封禁?

Craigslist作为美国最受欢迎的在线分类广告网站之一&#xff0c;无论是商务广告、招聘还是资讯都可以在上面进行。每月吸引约250万次访问&#xff0c;是扩大在线影响力的绝佳选择。尽管Craigslist允许创建多个账户&#xff0c;但在发布广告时存在一些限制。例如&#xff0c;你不…

使用shardingsphere实现mysql数据库分片

在大数据时代&#xff0c;随着业务数据量的不断增长&#xff0c;单一的数据库往往难以承载大规模的数据处理需求。数据库分片&#xff08;Sharding&#xff09;是一种有效的数据库扩展技术&#xff0c;通过将数据分布到多个数据库实例上&#xff0c;提高系统的性能和可扩展性。…

【JavaEE】数据链路层协议和DNS

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f45c;一.以太网 以太网&#xff08;Ethernet&#xff09;是一种局域网技术&#xff0c;它定义了开放系统互连&#xff08;OSI&#xff09;模型中的物理…

基于AWR1642 讲解TI毫米波雷达开发环境搭建

文章内容同步发布在公众号&#xff08;雷达原理与系统&#xff09;,欢迎关注交流~ 这是第三篇文章&#xff0c;上一篇文章介绍了“TI官方资源介绍和使用”&#xff0c;感兴趣的可以去参考一下。本篇内容打算介绍基于AWR1642讲解TI毫米波雷达开发环境搭建&#xff0c;包括常用的…

会员业务出口网关的设计与实现

01# 背景介绍 1.1 出口网关是什么 出口网关&#xff08;Egress Gateway&#xff09;是一种部署在云或企业网络中的网络组件&#xff0c;它控制着从内部网络&#xff08;如企业内网、内部微服务网络&#xff09;流出到外部网络&#xff08;如公共互联网或其他外部服务&#xf…

宠物浮毛难清理,希喂、小米、美的宠物空气净化器该选哪款?

养猫养出病来说的就是我了。 养猫之前幻想的一人一猫幸福生活还没一个月&#xff0c;我就进了医院。我自认为是很爱干净的人&#xff0c;养猫后打扫得更勤快了&#xff0c;早晚都给猫咪梳毛。平时卫生也没少搞&#xff0c;家里也是很干净的&#xff0c;实在不明白为什么会过敏…