STL map 的使用方法

C++STL中map内存彻底释放方法 最近遇到一个特别占内存的需求。使用STL map/unordered_map,内存无法得到正确释放。再次响应请求,会出现内存溢出的情况。 [6453149.107435] Memory cgroup out of memory: Kill process 54949 (******) score 1001 or sacrifice child [6453149.117193] Killed p... 阅读详情

STL map的使用方法 关键字: stl map 用法 一 map内部数据的组织 map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。 二 map的构造函数 map共提供了6个构造函数,这块涉及到内存分配器这些东西,略过不表,在下面我们将接触到一些map的构造方法,这里要说下的就是,我们通常用如下方法构造一个map: Map mapStudent; 三 数据的插入 在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法: 第一种:用insert函数插入pair数据,下面举例说明(以下代码虽然是随手写的。在VC下请加入这条语句,屏蔽4786警告 #pragma warning (disable:4786) ) Map mapStudent; mapStudent.insert(pair(1, “student_one”)); mapStudent.insert(pair(2, “student_two”)); mapStudent.insert(pair(3, “student_three”)); map::iterator iter; for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) 第二种:用insert函数插入value_type数据,下面举例说明 Map mapStudent; mapStudent.insert(map::value_type (1, “student_one”)); mapStudent.insert(map::value_type (2, “student_two”)); mapStudent.insert(map::value_type (3, “student_three”)); map::iterator iter; for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) cout<first<<” ”<second< mapStudent; mapStudent[1] = “student_one”; mapStudent[2] = “student_two”; mapStudent[3] = “student_three”; 区别:第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的;但是用数组方式就不同了,它可以覆盖以前该关键字对应的值,用程序说明 mapStudent.insert(map::value_type (1, “student_one”)); mapStudent.insert(map::value_type (1, “student_two”)); 验证插入的成功性:上面这两条语句执行后,map中1这个关键字对应的值是“student_one”,第二条语句并没有生效,那么这就涉及到我们怎么知道insert语句是否插入成功的问题了,可以用pair来获得是否插入成功,通过pair的第二个变量来知道是否插入成功,它的第一个变量返回的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true的,否则为false。 程序如下 Pair::iterator, bool> Insert_Pair; Insert_Pair = mapStudent.insert(map::value_type (1, “student_one”)); Map mapStudent; Pair::iterator, bool> Insert_Pair; Insert_Pair = mapStudent.insert(pair(1, “student_one”)); if(Insert_Pair.second == true) { Cout<<”Insert Successfully”<::reverse_iterator iter; for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++) { Cout<first<<” ”<second<(1, “student_one”)); mapStudent.insert(pair(2, “student_two”)); mapStudent.insert(pair(3, “student_three”)); map::iterator iter; iter = mapStudent.find(1); if(iter != mapStudent.end()) { Cout<<”Find, the value is ”<second<second<second<::iterator, map::iterator> mapPair; mapPair = mapStudent.equal_range(2); if(mapPair.first == mapPair.second) { cout<<”Do not Find”<::iterator iter; iter = mapStudent.find(1); mapStudent.erase(iter); //如果要删除1,用关键字删除 Int n = mapStudent.erase(1);//如果删除了会返回1,否则返回0 //用迭代器,成片的删除 //一下代码把整个map清空 mapStudent.earse(mapStudent.begin(), mapStudent.end()); //成片删除要注意的是,也是STL的特性,删除区间是一个前闭后开的集合 八. 其他一些函数用法 这里有swap,key_comp,value_comp,get_allocator等函数,感觉到这些函数在编程用的不是很多,略过不表,有兴趣的话可以自个研究 六. 排序 这里要讲的是一点比较高深的用法了,排序问题,STL中默认是采用小于号来排序的,以上代码在排序上是不存在任何问题的,因为上面的关键字是int型,它本身支持小于号运算,在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号操作,insert等函数在编译的时候过不去,下面给出两个方法解决这个问题 第一种:小于号重载,程序举例 Typedef struct tagStudentInfo { Int nID; String strName; bool operator < (tagStudentInfo const& _A) const { //这个函数指定排序策略,按nID排序,如果nID相等的话,按strName排序 If(nID < _A.nID) return true; If(nID == _A.nID) return strName.compare(_A.strName) < 0; Return false; } }StudentInfo, *PStudentInfo; //学生信息 第二种:仿函数的应用,这个时候结构体中没有直接的小于号重载,程序说明 Typedef struct tagStudentInfo { Int nID; String strName; }StudentInfo, *PStudentInfo; //学生信息 Classs sort { Public: Bool operator() (StudentInfo const &_A, StudentInfo const &_B) const { If(_A.nID < _B.nID) return true; If(_A.nID == _B.nID) return _A.strName.compare(_B.strName) < 0; Return false; } }; Int main() { //用学生信息映射分数 MapmapStudent; StudentInfo studentInfo; studentInfo.nID = 1; studentInfo.strName = “student_one”; mapStudent.insert(pair(studentInfo, 90)); studentInfo.nID = 2; studentInfo.strName = “student_two”; mapStudent.insert(pair(studentInfo, 80)); } 十. 另外 由于STL是一个统一的整体,map的很多用法都和STL中其它的东西结合在一起,比如在排序上,这里默认用的是小于号,即less<>,如果要从大到小排序呢,这里涉及到的东西很多,在此无法一一加以说明。 还要说明的是,map中由于它内部有序,由红黑树保证,因此很多函数执行的时间复杂度都是log2N的,如果用map函数可以实现的功能,而STL Algorithm也可以完成该功能,建议用map自带函数,效率高一些。 下面说下,map在空间上的特性,否则,估计你用起来会有时候表现的比较郁闷,由于map的每个数据对应红黑树上的一个节点,这个节点在不保存你的数据时,是占用16个字节的,一个父节点指针,左右孩子指针,还有一个枚举值(标示红黑的,相当于平衡二叉树中的平衡因子)。

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书) 作为经典畅销书的升级版,本书在第1版的基础上新增了大量新知识(如闪存、UFS、测试、文件系统等),并改写或删减了许多过时或不适用的内容,总修改量超过60%。本书由SSD技术社区SSDFans的核心团队成员联合业界、高校SSD方面的专家共同完成,相对于第1版,内容更全面、更新,也更有深度。本书从产品、技术和应用3个维度展开,全面、详细讲解了SSD的发展历史、产品形态、工作原理、整体架构,以及各个功能模块的原理和使用,从SSD的前端接口协议到FTL算法,再到后端的闪存和纠错,以及测试,本书都有涉及。 阅读详情

相关推荐

电影台词预测类型:NLP小样本多标签分类实战

电影类型预测本质上是短文本语义建模问题,核心在于从高度碎片化、低语义密度的台词(平均仅12.7词)中挖掘隐含的类型学编码规则。其技术难点在于:需应对省略主语、倒装、拟声词等非规范表达;处理Drama与Comedy等类型强共现的多标签耦合;并克服领域迁移障碍——维基文本预训练模型在台词上性能骤降0.11。解决方案聚焦RoBERTa微调、类型感知注意力机制与标签平滑策略,兼顾小样本鲁棒性与业务可解释性,广泛适用于影视元数据标注、智能推荐系统及NLP教学实践。

weixin_33309048的博客 290

VS2010 STL hashmap

版本是 V5.20:0009 hashmap继承于_Hash,基本所有实现都是对于_Hash得封装。这里主要是阅读一下_Hash的代码流程。 首先是hash_map声明 template<class _Kty, class _Ty, class _Tr = hash_compare >, class _Alloc = allocator > > class hash_ma

heartrude的专栏 2040

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法

昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。

qq_51404184的博客 9553

零基础都能看懂的 STL map 详解

???? 作者:Linux猿 ???? 简介:优快云博客专家????,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! ???? 关注专栏:C/C++面试通关集锦(优质好文持续更新中……)???? map 在编程中是经常使用的一个容器,本文来讲解一下 STL 中的 map,赶紧来看下吧! 一、什么是 map ? map 是具有唯一键值对的容器,通常使用红黑树实现。 map 中的键值对是 key value 的形式,比如:每个身份证号对应一个人名(反过来不成立哦!),其中,身份证号就

Muti-Agent 2万+

全面讲解电子齿轮比与脉冲数计算

什么是编码器分辨率。

viixin的博客 1万+

接口调试必看:status显示canceled的3种常见原因及修复方法

本文深度解析了接口调试中status显示canceled的三种核心原因:网络层中断(如请求超时)、应用层逻辑主动取消(如请求竞态、组件卸载)以及用户交互与浏览器行为。文章提供了从诊断到修复的系统性方案,包括分析Network Timing、使用Axios CancelToken、优化请求策略与性能,帮助开发者从根本上解决这一常见问题。

bb456的博客 937

STL —— map用法及实例详解(超详细完整)

文章目录map的基本性质STL —— map的用法 map的基本性质 STL —— map的用法

薛定谔的猫的博客 1万+

避坑指南:Python模拟抖音扫码登录时,那些你可能会遇到的‘Referer’和‘Token’校验问题

本文深入解析Python模拟抖音扫码登录时常见的Referer校验与Token失效问题,提供五大陷阱的解决方案。从动态fp参数生成到Referer校验策略,再到Token生命周期管理,手把手教你破解抖音登录接口的反爬机制,助力开发者高效完成自动化登录。

weixin_42573113的博客 783

【C++】手把手教你看懂的 STL map 详解(超详细解析,小白一看就懂!!)

【map】是STL中的容器之一,不同于普通容器,它的查找速度极快,常用来存储各种经常被检索的数据,因为容器的底层是【红黑树】。除此之外,还可以借助其特殊的性质,解决部分难题。

weixin_45031801的博客 9233

用HFSS仿真平面线圈的电感量

平面线圈是指在平面上绕制而成的线圈,如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈,六角形线圈、八角形线圈、螺旋原型线圈等。

johnboat的专栏 1万+

统信UOS系统盘空间不足?5分钟搞定扩容的图形化解决方案

本文提供统信UOS系统盘空间不足的图形化扩容解决方案,使用GParted分区编辑器在不丢失数据的情况下快速完成扩容。详细步骤包括准备工作、空间调整和执行验证,适合技术用户快速解决问题。

d6e7f8的博客 958

STL容器之map类

STL容器之map类

Xpccccc的博客 1422

AppStore逆向分析(登录、查询、下单)

某网站全协议流程逆向与分析(自动登录、激活、查询、下单)

吴秋霖的博客 3028

STL之map的使用方法

map的元素都是“实值/键值”所形成的一个对组。每个元素都有一个键,是排序的准则。每个键只能出现一次,不允许重复使用。map可以被视为关联式数组,也就是具有任意索引型别的数组。map就是一种红黑树的K,V模型 关于STL中map的使用方法:1、关于map迭代器的使用 这些迭代器迭代器的使用和set中迭代器的使用类似#include<iostream> #include<stdlib.h> #

persistence_s的博客 1021

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

STL map的使用方法

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义...

chenqunan3231的博客 248

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

正确使用stl map的erase方法

正确使用stl map的erase方法 先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.erase有3个重载: void erase ( iterator position ); size_type erase ( const k

风叶 1267

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++ STL中map方法的简单使用

C++ STL中map方法的简单使用新建map格式输出map形式查找元素删除元素。

weixin_45063703的博客 202

STL MAP四种插入方法

方法一:pair 例: map<int, string> mp; mp.insert(pair<int,string>(1,"aaaaa")); 方法二:make_pair 例: map<int, string> mp; mp.insert(make_pair<int,string>(2,"bbbbb")); 方法三:valu...

Bluenapa的博客 990

stl中map的四种插入方法总结

stl中map的四种插入方法总结 方法一:pair 例: map mp; mp.insert(pair(1,"aaaaa")); 方法二:make_pair 例: map mp; mp.insert(make_pair(2,"bbbbb")); 方法三:value_type 例: map mp; mp.insert(map::value_type(3,"ccccc"));

寒山小妖的博客 2万+

C++ STL Map常用方法详解

6.4 map的常用用法详解 ​ map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map的定义 ​ map<typename1, typename2> mp; ​ 注:如果是字符串到整型的映射,必须使用string而不能用char数组 2. map容器内元素的访问 (1). 通过下标访问 ​ 和访问普通的数组是一样的 #include <bits/stdc++.h> #include <map> using namespa

小李的博客 949

在STL中,map按值来排序的实现方法

在STL中,map按值来排序的实现方法 在STL中,map按值来排序的实现方法_永不言弃是生命的基调!_百度空间在STL中,map按值来排序的实现方法在STL中,map是按键来排序的,但很多时候需要按值来排序。一种方法是将map转化为vector,然后排序。too...

83

10、STL中的unordered_map使用方法

这个是常用的类型。要熟悉特性。它的迭代器是前向的,只能++,不能--

2401_82911768的博客 1464

STL中map的operator[ ]使用方法

在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员可以很方便地根据关键字获取到对应的值。虽然使用方便,但是还是有一些地方容易出现问题,值得大家的注意。        下面代码的输出结果会什么呢? [cpp] view

qq_31209383的博客 814

C++ STL中map、set概念及使用方法小结

1. 关联容器简介: STL标准模板库(Standard Template Library)是惠普实验室开发的一系列软件的统称。 STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)、iterator(迭代器)。 容器类可分为:序列式容器(sequence containers)、关联式容器(associative containers)。 序列式容器 包括: vector、list、deque、stack、queue、heap、priority_queue、slist 等

ArtAndLife的博客 1287
上一篇: emacs 中的快捷键
下一篇: 我的emacs~
Emacx
博客等级 码龄16年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值