C++ map / multimap 保姆级教程

一、map的认识

1.1 map的基本概念

map: 是一种键值对(key-value)容器,每个元素包含一个唯一的键(key)和对应的值(value)。键用于排序和唯一标识元素,值存储与键关联的数据。

map的特点:

  • 有序性: 元素按键的升序自动排序。
  • 唯一性: 每个键在 map 中只能出现一次。(不含重复数据)
  • 操作复杂度: 插入、删除和查找操作的平均时间复杂度为 O(log n)。

二、map的使用


1、map模板参数介绍:

在这里插入图片描述

关于map的声明有以下一些注意事项:

  • 第一个模板参数:key ,Key就是map底层关键字的类型。
  • 第二个模板参数:T(V) ,T(V)是map底层value的类型。
  • 第三个模板参数:比较器 ,set默认要求Key支持小于较,如果不支持或者需要的话可以自行实现仿函数传给第二个模版参数。
  • 第三个模板参数:空间配置器,一般情况下不需要传。

2、pair的介绍

在这里插入图片描述

在这里插入图片描述

  • pair是C++标准库中的一个模板类 ,用于存储两个不同类型的值,通常用于键值对的表示。其定义在头文件中,基本形式为std::pair<T1, T2>。T1就是key,T2就是value。
  • map是C++标准库中的关联容器 ,用于存储键值对 (key-value pairs),且键唯一。其定义在头文件中,内部通常以红黑树实现,以保证元素的有序性。

map与pair的联系:

map的每个元素本质上是一个pair对象 ,具体为std::pair<const Key, T(Value)>。键(Key)被声明为const以确保不可修改,只有(value)才能被修改。

为什么要有pair?

从数据访问的角度,在前面的二叉搜索树实现的过程中,我们通常是将key和value放在一个结点里面,要访问结点里面key或value只能通过这个结点去访问,但是如果我们结点里存的是一个pair那么拿到一个pair就能同时得到key和value的值,这样可以明确的表示这两个数据的关联性,避免键和值单独管理。也有利于数据的访问。

2.1map的构造和迭代器

对于map的构造我们关注以下几个接口即可:

在这里插入图片描述

代码示例:

代码语言:javascript

AI代码解释

复制代码
#include<iostream>
#include<map>
using namespace std;
void test_map1()
{
	//无参默认构造
	map<string, string> dict;
	//初始化列表构造
	map<string, string> dict1 = { {"left","左边"},{"right","右边"},{"sort","排序"} };
	//拷贝构造
	map<string, string> dict2(dict1);
	//迭代器区间构造
	map<string, string> dict3(dict1.begin(), dict1.end());
}

在这里插入图片描述


2、map的迭代器

在这里插入图片描述**map的迭代器是一个双向迭代器,所以map 支持正向和反向迭代遍历** ,默认按照 key 的升序顺序遍历,这是因为其底层采用二叉搜索树结构,迭代器遍历遵循中序遍历方式。由于支持迭代器,map 自然也支持范围 for 。需要注意的是: map 允许修改 value 数据,但禁止修改 key 数据,因为修改关键字会破坏底层搜索树的结构。

相关推荐
Wang's Blog1 分钟前
Java 项目实战:交友项目 —— 项目导读与整体架构
java·架构·交友
今年下半年14 分钟前
【短信发送】Spring Boot整合多种短信接口的实现(附源码)
java·spring boot·后端·sms·qcloudsms
盛世宏博北京20 分钟前
十二防档案库房总线架构设计:恒湿消毒净化一体机 RS485 组网实战笔记
开发语言·笔记·php·恒湿机·档案八防温湿度
wespaul23 分钟前
VeapAI 自然语言操作实战|第 04 篇:系统数据加工——把系统自身的元数据吃成知识
java·大数据·运维·数据库·人工智能
幼儿园蛋小黑26 分钟前
SPI 子系统:从原理到实践
java·前端·数据库
浅念-26 分钟前
动态规划:线性DP——多状态DP与子数组专题笔记
c++·笔记·算法·leetcode·职场和发展·动态规划·力扣
雪雪爱冲浪32 分钟前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
要吃这碗饭1 小时前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
czq_26867194871 小时前
Python打卡第40天
开发语言·python
yangmu32031 小时前
Unity 开发过程与底层原理
java·开发语言