C++语法之STL映射类

c++函数映射(Mapping Functions to a Map in C++) C++函数映射 Mapping Functions to a Map in C++ 阅读详情

键值对容器,在需要频繁快速查找时使用

map和multimap类

头文件:< map>
内部结构类似二叉树实现,在插入元素的时进行排序,所以不能替换特定位置的元素
map和multimap的差别在于能不能储存唯一的键

  • 实例化:
std::map<keyType,valueType,Predicate=std::less<keyType>> Name;
std::multimap<keyType,valueType,Predicate=std::less<keyType>> Name;
//示例
// map and multimap key of type int to value of type string
map<int, string> mapIntToStr1;
multimap<int, string> mmapIntToStr1;

// map and multimap constructed as a copy of another
map<int, string> mapIntToStr2(mapIntToStr1);
multimap<int, string> mmapIntToStr2(mmapIntToStr1);

// map and multimap constructed given a part of another map or multimap
map<int, string> mapIntToStr3(mapIntToStr1.cbegin(),mapIntToStr1.cend());
multimap<int, string> mmapIntToStr3(mmapIntToStr1.cbegin(),mmapIntToStr1.cend());

第三个参数缺省使用std::less<>

  • insert
    插入的方式有:
3: MAP_INT_STRING mapIntToStr;
	//typedef map <int, string> MAP_INT_STRING;
4:
5: // Insert key-value pairs into the map using value_type
6: mapIntToStr.insert (MAP_INT_STRING::value_type (3, "Three"));
7:
8: // Insert a pair using function make_pair
9: mapIntToStr.insert (make_pair (-1, "Minus One"));
10:
11: // Insert a pair object directly
12: mapIntToStr.insert (pair <int, string>(1000, "One Thousand"));
13:
14: // Use an array-like syntax for inserting key-value pairs
15: mapIntToStr [1000000] = "One Million";
  • find
    find成员函数,根据键查找值,返回一个迭代器,需要检查
    示例:
35: auto pairFound = mapIntToStr.find(key);
36: if (pairFound != mapIntToStr.end())
37: {
38: cout << "Key " << pairFound->first << " points to Value: ";
39: cout << pairFound->second << endl;
40: }
41: else
42: cout << "Sorry, pair with key " << key << " not in map" << endl;

multimap可能会返回多个键值对

  • erase
    三种版本
//key
auto numPairsErased = mmapIntToStr.erase(-1);

//iterator
auto pair = mmapIntToStr.find(45);
if(pair != mmapIntToStr.end()){
mmapIntToStr.erase(pair);
}

// Erase a range from the multimap... 
mmapIntToStr.erase(mmapIntToStr.lower_bound(1000),mmapIntToStr.upper_bound(1000) );
  • count
    count(value),在multimap中返回容器中有多少个元素包含特定的值

  • 排序谓词
    结构:

template<typename keyType>
struct Predicate{
bool operator()(const keyType& key1, const keyType& key2){
// your sort priority logic here
	}
};
  • 散列函数类unordered_map、unordered_multimap
    头文件:
    < unordered_map> 平均插入和删除时间是固定的,查找元素的时间也是固定的,使用hash原理实现的
    常用函数有:
    1. insert()
    2. find()
    3. size()
    4. max_bucket_count()
    5. load_factor()
    6. max_load_factor()
      注:当装载因子超过最大值的时候,会重新组织以增加桶数,并重建散列表
【C++21天养成计划】映射类——快速上手STL map 和 multimap(Day17) 小白专属的《C++21天养成计划》,助你高效快速入门C++编程! 阅读详情

相关推荐

第四十五节 C++ STL(标准模板库)-映射类std::map std::multimap std::unordered_map std::unordered_multimap

map的操作与set类似,操作可参考上一节,这里仅介绍基本操作映射类: 为key-value(键-值)对容器, 支持根据key查找value, 如根据int可查找对应的stringstd::map: 存储唯一的键, 默认从小到大排序std::mulitmap: 可存储重复的键 , 默认从小到大排序 std::unordered_map: 用散列函数排序,键唯一 std::unordered_mul...

菜鸟博客 1037

「C++ 类和对象篇 1」类的引入

一、类的概念 二、类的引入 三、类的定义 四、封装及类的访问限定符 五、类的作用域和生命周期 六、类的实例化 七、类和对象的存储方法 八、计算类的大小

look_outs的博客 1850

⚡【C++要笑着学】(31) 映射类:map 类 | pair 类型 (value_type) | map 的插入和遍历 | map 的 operator[] | multimap 类

本章我们继续讲解 STL,讲解 STL 的 map 类。我们将详细介绍 map 类的基础概念,包括 pair 类型(value_type)的应用和插入元素的方法。随后,我们将深入研究 Map 的遍历方式以及统计元素出现次数的几种方式。最后我们再简单介绍一下不去重版本的 multimap,建议通过查看官方文档的方式辅助学习。

有道无术, 术尚可求。有术无道, 止于术。 3775

c++如何实现类名创建类对象(反射)

c++开发过程中使用工厂模式创建各种类对象的时候可能需要写一堆的’if-else’函数来根据传入的参数类型创建不同的类对象;步骤: 1> 创建一个单例工厂类, 类中维护一个类名和创建对应类的回调函数的映射关系(map) 2> 需要创建的时候根据传入的类名参数查找对应的回调函数来创建类。这样的效果. 其实就是JAVA中的反射机制的体现, 实际c++本身是不支持的, 但是可以通过曲线救国的方式来实现.核心: 通过回调函数来实现创建.

SuperYang_的博客 1056

C++ 字符串与类的映射

示例代码,教您如何将字符串映射为同名类。

深入C++ 函数映射的使用详解

我比较喜欢用代码结合实际来讲解,下面我将以一段事例代码来讲解如何使用这几种映射

c++映射详解

因为元素键在map中是唯一的,所以插入操作首先检查给定键是否已存在于map中,如果键已存在于map中,则它不会插入map中,并且迭代器将迭代到现有键返回,否则在map中插入新元素。因为map的每一对映射都有两个typename,所以,我们使用“it->first”来访问“键”(下标),而使用“it->second”来访问“值”(内容)。其中,typename1是映射前的类型(键key),typename2是映射后的类型(值value),name为映射的名字。m.erase();//定义映射类型的迭代器。

浪子回头 2013

Win10系统内存占用异常飙升?三步排查法快速定位问题根源

本文针对Win10系统内存占用异常飙升问题,提供了一套三步排查法。首先利用任务管理器和资源监视器进行深度系统体检,定位隐形内存消耗者;其次通过干净启动和禁用非必要后台服务,揪出导致内存泄漏的第三方软件或驱动;最后进行终极深度清理,包括检查内存完整性、调整虚拟内存设置以及更新关键驱动程序,帮助用户快速恢复系统流畅运行。

weixin_29251567的博客 196

C++学习第二十二课:STL映射类的深入解析

映射类容器存储键值对,允许通过键快速查找、插入和删除元素。通过本课的学习,你深入了解了STL中的映射类容器,包括std::map和,以及它们的初始化、元素访问、添加和移除元素、迭代器使用、内存管理、异常安全性、实际应用、线程安全性和性能考量。映射类容器是C++中处理键值对数据的强大工具,它们在需要快速查找和存储关联数据的场景下非常有用。掌握映射类容器的使用对于编写高效、安全、可维护的C++程序至关重要。

2401_84585615的博客 715

SAP-ABAP:SAP中如何查看系统表之间的关联关系?

在业务逻辑开发或者ALV开发过程中,我们通常要从系统中找出几个标准表之间的关联关系,有的是head与item,通过外键进行关联的关系。那么怎么去找到呢?以上就是具体如何产看系统表之间的关联关系的步骤,对于不同代码的业务顾问,也是必须要掌握的。

LinkStar的博客 2430

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7242

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

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

cqy阳的博客 1381

OpenCode:开源代码智能代理平台的全面解析

OpenCode是一个开源代码智能代理平台,采用模块化微服务架构,支持多种AI模型集成。该系统包含前端交互层、代理服务层和模型集成层,提供Build、Plan和General三种代理模式,分别负责代码编写、分析和复杂任务处理。OpenCode支持跨平台安装,具备权限验证、上下文感知等安全机制,并集成LSP协议实现深度代码理解。相比竞品,其开源特性、终端优先设计和提供商无关架构具有明显优势,适用于个人开发、团队协作等多种场景,为开发者提供强大的AI辅助编程能力。

Aaron_945的博客 1424

STL映射类

在力扣做题,两数之和。自己大概就是个只能写出暴力法的渣。但是还是得吐槽,力扣的答案代码竟然是Java,个人觉得用C才更好一些吧,毕竟C是最具有群众基础的语言了。看到优化的算法用到了map,于是过来学习一下C++的映射类。 map 和 multimap 是键-值对容器,支持根据键进行查找。 map 和 multimap的区别在于:后者能够存储重复的键,和前者只能存储唯一的键。为了实现快速查找,S...

王学门徒 189

无需UMAT:基于Abaqus内置模型实现形状记忆聚合物结构的热-力耦合仿真

本文详细介绍了如何利用Abaqus内置模型实现形状记忆聚合物(SMP)的热-力耦合仿真,无需编写复杂的UMAT子程序。通过广义Maxwell模型和Neo-Hookean模型的组合应用,结合完整的热-力耦合分析流程,帮助工程师高效模拟SMP的形状记忆行为。文章还提供了工程应用案例和常见问题解决方案,为相关领域的研究和设计提供实用指导。

weixin_34005090的博客 117

9、硬件工程师笔试面试知识器件篇——三极管(2025版本)

本文全面介绍了三极管的基础知识与应用,包括其结构、类型、工作原理、工作状态、功能、应用场景及特性参数。详细探讨了三极管在信号放大、无线通信、音频设备及医疗设备中的具体应用,并深入分析了设计放大电路时如何平衡增益与噪声、优化偏置电路以提高稳定性、使用负反馈改善性能等关键问题。此外,文章还涵盖了高频电路设计、温度补偿策略、电磁干扰防护等实用内容,为硬件工程师提供了全面的技术参考和设计指导。

XU157303764的博客 7313

c++stl模板总结

1.初始化vector具有多个重载的构造函数,可以在实例化vector时指定他开始时应该包含的元素个数以及元素的初始值,还可以用一个vector初始化另一个vector//c++11 列表初始化//初始化10个元素//用10个元素0初始化vector2.常用函数(增删查)c.insert(it, x) //向任意迭代器it插入一个元素x ,O ( N )c.front() //返回第一个数据O (1)c.back() //返回数组中的最后一个数据 O (1)

平安喜乐 802

PX4从放弃到精通(十一):混控及PWM输出

文章目录前言一、混控脚本二、使用步骤1.引入库2.读入数据总结 前言 一个人可以走的更快,一群人才能走的更远,交流学习加qq:2096723956 更多保姆级PX4+ROS学习视频:https://b23.tv/ZeUDKqy 分享知识,传递正能量,如有疏漏或不当之处,恳请指出. 一、混控脚本 混控脚本定义了不同 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pand

超维空间科技的博客 1万+

C++20 STL CookBook 7 Containers(II)

对于有序映射,键的类型必须是可排序的,这意味着它必须至少支持小于 < 比较运算符。假设您想要使用具有不可排序的自定义类型的关联容器。例如,向量 (0, 1) 不小于或大于 (1, 0),它只是指向不同的方向。在这种情况下,您仍然可以使用 unordered_map 类型。让我们看看如何做到这一点。我们现在呢,把Key设置为一个坐标:int x{};int y{};​我们知道unordered_map还需要第三个模板参数:template

charlie114514191的博客 1503

YOLO26 多模态融合技术:RGB+红外/深度/雷达融合

YOLO(You Only Look Once)是一种流行的目标检测算法,其最大特点是快速且端到端地完成图像中所有目标的检测与分类任务。YOLO首次在2016年由Joseph Redmon等人提出,彻底改变了传统目标检测(如R-CNN系列)的思路,被广泛应用于自动驾驶、视频监控、工业质检等场景。

一键难忘的博客 3523

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++标准模板库集合类与映射类总结

一、STL集合类 标准模板库向程序员提供了一些容器类,以便在应用程序中频繁而快速的搜索。std::set和std::multiset用于存储一组经过排序的元素,其查找元素的复杂度为对数,而unordered集合的插入和查找时间是固定的。 容器set和multiset快速查找键,键是存储在一维容器中的值,multiset可存储重复的键值,而set不行。STL容器是泛型模板类,可用于存储字符串、整

ZhangPY的专栏 3757

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

STL 映射类

STL 映射类:map、multimap、unordered_map、unordered_multimap

weixin_43869409的博客 194

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

STL随感

map映射类概念:函数子(functor),比较子(comparator)。函数子是对象化的算法。比较子是一种函数子。关于比较子,用到了一个比较重要的C++技术,就是重载括号运算符。这个运算符的重载一般很少用到,它的思想是把函数调用演化成对象的运算符操作。这样就实现了算法的对象化。将函数(算法)参数化并非STL的创新,在C中就已经有函数指针。例如一个小于运算的函数过程:struct { int

quanben 1311

C++ STL特点 和 类的构造

C++ STL 和 类的构造 STL vertor 向量数组,就和数组差不多 string 字符串容器, 能够对字符串进行修改、排序、插入等等 deque 双端队列容器, 能够往队列的前面和后面都可以进行插入(push) list 列表容器, 双向链表,可以删除某个值, 在某个位置前面插入,在链表尾部插入 set/multiset 集合类容器, 可以自动对关键字进行升序排序,可以返回容器中出现的elem元素的次数和寻找某个关键字 map/multimap 映射类容器, 主要通过insert插入,可以查找某

qq_43524270的博客 192

C/C++基本知识(三)

from http://blog.youkuaiyun.com/peng825223208/article/details/41484401 std::list也是双向链表类;std::list是C++类库,在任何操作系统的C++编译器(标准的)都可用,而CList只能在微软操作系统下使用(但是在面试题中常见,适用于教学)。 2、std与STL区别:a)STL:标准模板库    b)std是一

distsau的博客 733
上一篇: C++语法之指针和引用
下一篇: C++基础知识补充之数组与字符串
鹅鹅鹅www
博客等级 码龄9年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值