【C++编程】字典 map/multimap 容器基本操作

[C++] STL之树形结构关联式容器(map、set、multimap、multiset) 关联式容器引入键值对树形关联式容器map使用方法 引入 之前所学的序列式容器,其底层为线性序列的数据结构,里面存储的是元素本身。 而关联式容器也是用来存储数据的,与序列式容器不同的是其里面存储的是< key , value >结构的键值对,在数据检索时比序列式容器效率更高。 键值对 键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代... 阅读详情

🔥 特点:map 中的所有元素都是 (key, value) pair,在元素插入时会 (按 key) 自动排序

map 属于关联式容器、底层由二叉树实现
map vs. multimap: 前者不可以包含重复 key;后者可以

步骤零: 使用时需要包含头文件 #include<map>

void printMap(map<int, int> &m) // 逐个元素打印
{
    for (map<int, int>::iterator i = m.begin(); i!=m.end(); i++)
    {
        cout << "key: " << (*i).first << " value: " << (*i).second << endl;
    }
}

💜 map 构造与赋值

// 1. 默认构造
map<int, int> m1;
m1.insert(pair<int, int>(1,2));
m1.insert(pair<int, int>(5,6));
m1.insert(pair<int, int>(3,4));  // 会自动排序
/* key: 1 value: 2
   key: 3 value: 4
   key: 5 value: 6 */

map<int, int> m11;
m11 = m1; 

// 2. 拷贝构造			
map<int, int> m2(m1);		
  • 为了使用方便,可对模板类进行一下类型定义
    typedef map<int,int> UDT_MAP_INT_INT;
    UDT_MAP_INT_INT m1;
    

💜 map 插入和删除:insert、erase、clear

map<int, int> m1;
m1.insert(pair<int, int>(1,2));
m1.insert(pair<int, int>(5,6));
m1.insert(pair<int, int>(3,4));
/* key: 1 value: 2
   key: 3 value: 4
   key: 5 value: 6 */

m1.erase(m1.begin());  // 用迭代器刪除
/* key: 3 value: 4
   key: 5 value: 6 */

m1.erase(3);			// 用关键字刪除
/* key: 5 value: 6 */

m1.clear();

💜 map 大小获取:empty、 size

map<int, int> m1;
m1.insert(pair<int, int>(1,2));
m1.insert(pair<int, int>(5,6));
m1.insert(pair<int, int>(3,4));

cout << m1.empty() << endl;		// 0
cout << m1.size() << endl;		// 3

💜 map 元素统计:find、 count (map vs. multimap)

map<int, int> m1;
m1.insert(pair<int, int>(1,2));
m1.insert(pair<int, int>(5,6));
m1.insert(pair<int, int>(3,4));
m1.insert(pair<int, int>(3,5));  // key 重复,当前插入未生效

// find 返回迭代器 map<int, int>::iterator pos = m1.find(3)
cout << (*m1.find(3)).first << ' ' << (*m1.find(3)).second << endl;  // 3 4
cout << m1.count(3) << endl;  // 1, 非 2 因为 map 中的 key 是唯一的

multimap<int, int> m2;
m2.insert(pair<int, int>(1,2));
m2.insert(pair<int, int>(5,6));
m2.insert(pair<int, int>(3,4));
m2.insert(pair<int, int>(3,5));

// find 返回迭代器 map<int, int>::iterator pos = m2.find(3)
cout << (*m2.find(3)).first << ' ' << (*m2.find(3)).second << endl;  // 3 4
cout << m2.count(3) << endl;  // 2, 是 2 因为 multimap 中的 key 非唯一的

💜 map 元素互换:swap

map<int, int> m1;
m1.insert(pair<int, int>(1,2));

map<int, int> m2;
m2.insert(pair<int, int>(3,4));

m1.swap(m2);
// m1		key: 3 value: 4
// m2		key: 1 value: 2

💜 map 自定义排序:由大到小示例

#include<iostream>
#include<set>
using namespace std;

#include <algorithm>

class my_compare  // 自定义排序 
{
public:
    bool operator()(int v1, int v2)  // 仿函数,重载 () 运算
    {
        return v1 > v2;
    }
};

void printMap(map<int, int, my_compare> &m) // 逐个元素打印
{
    for (map<int, int>::iterator i = m.begin(); i!=m.end(); i++)
    {
        cout << "key: " << (*i).first << " value: " << (*i).second << endl;
    }
}

int main()
{
	map<int, int, my_compare> m1;
	m1.insert(pair<int, int>(1,4));
	m1.insert(pair<int, int>(5,2));
	m1.insert(pair<int, int>(3,6));
	/* 不加 my_compare,原输出是:
		key: 1 value: 4
		key: 3 value: 6
		key: 5 value: 2	
		加 my_compare,输出变成:
		key: 5 value: 2
		key: 3 value: 6
		key: 1 value: 4
	*/
	printMap(m1);
	return 0; 
}

【博客参考链接】
【黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难】

Virtuoso ADE Explorer实战技巧:从基础操作到高级仿真 本文深入解析了Virtuoso ADE Explorer在模拟电路仿真中的核心价值与实战技巧。作为Cadence平台的专业工具,它专为高效、系统化的设计空间探索而生,能大幅提升PVT验证、参数扫描和蒙特卡洛分析的效率。文章从基础界面操作、并行仿真管理,到高级的参数扫描、数据报告生成及蒙特卡洛结果深度剖析,提供了全面的避坑指南与工作流优化建议,帮助工程师从重复劳动中解放,专注于电路设计与性能优化。 阅读详情

相关推荐

DVWA靶场实战:从搭建到渗透测试的完整指南

本文详细介绍了DVWA靶场的搭建与渗透测试全流程,涵盖LAMP环境搭建、Docker部署及集成环境安装三种方式。通过SQL注入、文件上传漏洞等实战案例,帮助读者掌握Web安全测试技巧,并提供防御方案与进阶调优建议,是网络安全学习的实用指南。

weixin_28312391的博客 488

【C++】map & multimap

map介绍,map使用(代码示例);multimap介绍,multimap使用(代码示例);

Captain_ldx的博客 782

VMware Workstation 17 Pro 保姆级教程:手把手教你安装银河麒麟 Kylin V10 SP3 国产系统

本文提供VMware Workstation 17 Pro安装银河麒麟Kylin V10 SP3的详细教程,涵盖环境准备、虚拟机配置、系统安装及优化全流程。通过分步指导和实用技巧,帮助用户高效搭建国产操作系统开发测试环境,特别适合技术自主可控需求场景下的虚拟化实践。

weixin_30879169的博客 645

【C++ STL】 --- map

1、map基本概念 简介: map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map/multimap属于关联式容器,底层结构是用二叉树实现。 优点: 可以根据key值快速找到value值 map和multimap区别: map不允许容器中有重复key值元素 multimap允许容器中有重复key值元素 2、map的构造和赋值 功能描述: 对map容器进行构造和赋值操作

M2嵌入式 965

天融信防火墙NGFW4000(TG-4628)安装配置笔记

配置一台全新的天融信防火墙NGFW4000,配置完后,内网用户10.10.1.0/24和10.10.2.0/24可以通过防火墙上网,外网用户可以通过访问防火墙的外网接口地址来访问内网的WEB服务器10.10.1.200,并且内网用户也可以通过WEB服务器的外网地址进行访问。 网络说明: 防火墙外网接口地址:218.90.123.121/30 防火墙内网接口地址:19...

weixin_33671935的博客 4454

SIPVicious实战指南:从零开始掌握VoIP渗透测试(Kali Linux环境)

本文为SIPVicious实战指南,详细介绍了在Kali Linux环境下进行VoIP渗透测试的完整流程。从环境准备与工具安装开始,逐步讲解如何使用svmap扫描SIP服务器、svwar枚举PBX分机号,以及svcrack进行密码安全测试,并整合svreport生成报告。旨在帮助安全从业者从零开始,系统掌握这套经典开源工具,在授权范围内有效评估VoIP系统的安全性。

weixin_29327977的博客 537

字典类型(map)

以上只是基本的存储类型,而各个编程语言中的字典都会在此基础上进行相应的修改和优化(想了解更多的可以看一下GO中map底层实现机制)这种结果之所以块,是因为根据key可以直接找到数据存放的位置;而其他的数据类型是需要从前到后去逐一比对,相对来说比较耗时。这种类型最大的特点就是查找速度非常快,因为他的底层存储就是基于哈希表存储的(不同语言还会有一些差异)。注意:键不重复&键必须可哈希(int/bool/float/string/array)前提:键不重复 &键必须可哈希。

shinamshiro的博客 701

【异常】API 速率限制报错问题全流程排查与解决指南 API rate limit reached. Please try again later.

摘要: 本文针对大模型API开发中常见的速率限制报错("API rate limit reached")提供全流程解决方案。首先解析该报错的本质是服务端对高频调用的保护机制,通过三步排查法确认根因:客户端请求频率超出账户阈值。提出三级解决方案:1)临时等待限流周期重置;2)升级付费账户提高调用配额;3)构建多模型容灾架构实现自动切换。建议生产环境优先采用容灾方案,通过备用API节点保障业务连续性,同时平衡不同模型服务的成本与性能。

奶爸的编程之路,也就一周冷个三天 1421

字典、哈希与Map(归纳的不错)

 HashMap、Map等是很多公司面试、笔试的时候常考的题目,也是实际开发中经常用到的数据结构,必须好好掌握。因此我从《J2EE开发全程实录》中摘取了下面的片段,希望对同学们有帮助。学习时请对照着《数据结构》这门课中“散列”相关的章节复习。在实际问题中,按照给定的值进行数据查询是经常遇到的,比如,在电话号码簿中查询某个人的电话号码;在图书馆中按照ISBN编号查找某本书的位置;在地图中按照

mingxunzh的专栏 1618

Python爬虫实战:基于最新技术爬取国家企业信用信息公示系统数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的国家企业信用信息公示系统爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、数据解析与存储等高级话题,最终实现一个完整的爬虫系统。文章包含大量实战代码示例,适合中高级Python开发者学习参考。网络爬虫(Web Crawler)是一种自动获取网页内容的程序,广泛应用于搜索引擎、数据分析和商业情报收集等领域。通用爬虫:如搜索引擎爬虫,广泛抓取互联网公开信息聚焦爬虫:针对特定领域或网站的数据采集增量式爬虫:只抓取更新内容,减少资源消耗。

2201_76125261的博客 2405

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 964

Go---字典(map)

"name" : "隔壁老王" , "habby" : "喜欢隔壁少妇" } fmt . Println(dic) // map[habby:喜欢隔壁少妇 name:隔壁老王]

Lovely_red_scarf的博客 2735

【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1054

【C++:map和set的使用】C++ map/multimap完全指南:从红黑树原理入门到高频算法实战

map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key支持小于比较,如果不支持或者需要的话可以自行实现仿函数传给第二个模版参数,map底层存储数据的内存是从空间配置器申请的。一般情况下,我们都不需要传后两个模版参数。map底层是用红黑树实现,增删查改效率是O(logN),迭代器遍历是走的中序,所以是按key有序顺序遍历的。两条直线相交,其中一条直线上有一个点A,过点A作与另一条直线的垂线,焦点是B——A点和直线上的B也可以是成映射关系。

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 1710

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【C++】map详解

map的结构和set很类似,部分功能就不演示了,上一篇博客中有Map是 C++ 中非常重要的关联容器之一。它以键值对的形式存储数据,其中每个键都是唯一的,这意味着不能有重复的键。如果尝试插入一个已存在的键,将会覆盖该键对应的值。Map的内部结构是红黑树,这使得它具有很多优点。首先,数据是有序的,这有助于高效地进行查找、插入和删除操作。查找、插入、删除的平均和最坏时间复杂度都是O (log n),其中 n 是 map 中元素的个数。例如,当我们需要存储学生的学号和姓名时,可以使用。

2301_77954967的博客 8564

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ set、map、multiset和multimap容器

本文将重点探几种种基于树形结构的关联式容器set、multiset、map和multimap。这这四种容器在C++标准库中占据着重要地位,它们不仅提供了强大的数据存储和检索功能,还各自具备独特的特性,如自动排序、键值对的存储以及多键值的支持。接下来,我们将详细介绍他们的特性和用法,帮助读者更好地理解和运用树形结构关联式容器。集合是按照特定顺序存储唯一元素的容器。在set中,元素的值也标识它(值本身就是键,类型为T),并且每个值必须是唯一的。set中元素的值在容器中。

2301_79171011的博客 1197

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ STL库map,unordered_map,multimap,unordered_multimap详解

本文摘要:文章系统介绍了C++ STL中的关联容器,重点分析map、unordered_map及其变体multimap的特性与使用。map基于红黑树实现,保持元素有序性,提供O(logn)操作复杂度;unordered_map基于哈希表,提供平均O(1)访问但无序存储。详细对比了两者在构造、访问、查找、删除等方面的差异,并介绍了multimap允许重复键的特性。

我的博客主要是用来给我自己复习的,主要是上传一些知识点,小型的项目和功能模块,如果有什么问题或错误麻烦联系我! 821

【C++】set,multiset,map,multimap

set,multiset,map,multimap

林宇恒的博客 960

【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍

set的文档介绍翻译:set是按照一定次序存储元素的容器。在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。

枫叶丹4的博客 1325

C++set/multiset/pair/map/multimap容器基本操作

C++set/multiset/pair/map/multimap容器基本操作 目录C++set/multiset/pair/map/multimap容器基本操作set/multiset|#include< set >set更改默认排序pair对组map/multimap|#include< map > set/multiset|#include< set > ...

Jancoyan 218

C++编程中map与multimap的深度解析

定义一个map容器非常简单,只需指定键和值的类型即可。例如,定义一个存储字符串键和整数值的map// 初始化方式之一:插入键值对// 遍历map并打印内容return 0;定义multimap的方式与map类似,只需将容器类型更改为multimap即可。// 插入多个具有相同键的键值对// 遍历multimap并打印内容return 0;map和multimap作为C++ STL中的关联容器,各自具有独特的特性和适用场景。map。

454

【C++初阶】STL详解(十)set、map、multiset、multimap的介绍及使用

set与map的介绍与使用

小小unicorn的博客 1427

【跟学C++】C++映射类——map/multimap类(Study17)

【跟学C++】C++映射类——map/multimap类(Study17)

cqy阳的博客 1381

【C++】容器篇(五)—— map和set的基本介绍

map和set的基本介绍

m0_56069910的博客 947

《C++》Map和Set:小白也能懂的解析

C++中map和set讲解

Maysheeo的博客 1165

C++>关联式容器,map,set,multimap,multiset的使用方法

C++>关联式容器,map,set,multimap,multiset的使用方法

qq_42069216的博客 324
上一篇: LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】
下一篇: 【SQL 新手教程 2/20】关系模型 -- 主键
CODE_RabbitV
博客等级 码龄7年 2931粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值