stl--map-set用法记录

c++ 关联容器用法详解(set与map) 三、关联容器 关联容器与序列容器有着根本性的不同,序列容器的元素是按照在容器中的位置来顺序保存和访问的,而关联容器的元素是按关键元素来保存和访问的。关联容器支持高效的关键字查找与访问。两个主要的关联容器类型是map与set。 1.set 1.1 简介:set里面每个元素只存有一个key,它支持高效的关键字查询操作。set对应数学中的“集合”。 1.2 特点: 储存同一类型的数据元素... 阅读详情

Map和set内部的元素不可以重复,这一点不同于multimap和multiset。

map的节点是一对数据,使用关键字key来标示每一个成员,相当于字典,把一个值映射成另一个值,如果想创建字典的话,map就是一个很好的选择。

set的节点是一个数据。

一、map使用

1、声明

    map<int, string> Solution;                    (默认是less())   升序

    map<int, string, greater(string)> Solution;                  降序,从大到小

2、插入

    第一种:用insert函数插入pair数据        
                map<int, string> mapStudent;
                mapStudent.insert(pair<int, string>(1, "student_one"));
    第二种:用insert函数插入value_type数据
                map<int, string> mapStudent;
                mapStudent.insert(map<int, string>::value_type (1, "student_one"));
    第三种:用数组方式插入数据
                map<int, string> mapStudent;
                mapStudent[1] = "student_one";

                mapStudent[2] = "student_two";

3、删除

    迭代器删除 
            iter = mapStudent.find(1);
            mapStudent.erase(iter);
    用关键字删除
            Int n = mapStudent.erase(1);//如果删除了会返回1,否则返回0
    用迭代器,成片的删除,一下代码把整个map清空
            mapStudent.earse(mapStudent.begin(), mapStudent.end());
            //成片删除要注意的是,也是STL的特性,删除区间是一个前闭后开的集合

4、大小

    Int nSize = mapStudent.size();

5、遍历

    第一种:前向迭代器
                map<int, string>::iterator iter;
                for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
                        cout << iter->first << " " << iter->second;
    第二种:反相迭代器
                map<int, string>::reverse_iterator iter;
                for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)
                        cout << iter->first << " " << iter->second;
    第三种:用数组方式
                int nSize = mapStudent.size()
                for(int nIndex = 1; nIndex <= nSize; nIndex++) 

                        cout << mapStudent[nIndex];

6、查找

    第一种:用count函数来判定关键字是否出现,但是无法定位数据出现位置

    第二种:用find函数来定位数据出现位置它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没  有要查找的数据,它返回的迭代器等于end函数返回的迭代器。

    第三种:这个方法用来判定数据是否出现
                Lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)
                Upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)
               ( 例如:map中已经插入了1,2,3,4的话,如果lower_bound(2)的话,返回的2,而upper-bound(2)的话,返回的就是3)

            Equal_range函数返回一个pair,pair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map中不出现这个关键字。


二、set


    类比 map

数据结构与算法分析(十三)--- 集合与映射 + Set/Map容器(C++11) 一、集合与映射 人们把一堆东西放到一起,就称之为集合了。一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集,构成集合的事物或对象称作元素或是成员。集合的元素可以是任何事物,集合具有无序性、互异性、确定性等特性。 在数学上,我们可以把映射看作是集合与集合之间的一种对应关系,比如函数实际上就是数的集合到数的集合之间的映射关系。计算机更擅长处理数字编号,我们的大脑更擅长处理概念词汇,因此我们经常需要通过某个关键词key来查询一组数据的信息value,于是就把这种映射关系抽象为一个数据结构:键值对。 阅读详情

相关推荐

C++ - STL标准库

1.C++ STL标准库简介 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西” 的方法,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种 组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。 复用性必须建立在某种标准之上。但是在许多环境下,就连软件开发最基本的数据结构(data structures) 和算法(algori

weixin_49303682的博客 1万+

STL容器_map与set

序列式容器与关联式容器 之前学的vector、list、deque都是序列式容器,在逻辑结构上是线性表。(栈和队列是容器适配器)而今天所学习的map与set是一棵搜索树,它叫做树型结构关联式容器,之后会学习的哈希表他是一种哈希结构关联式容器。 关联式容器: 关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高 树型结构的关联式 容器主要有四种:map、set、multimap、multiset。这四种容器的共同点

qq_45928272的博客 535

【C++标准模板库】一些函数的用法(vector、set、map)

变长数组”,相当于一维数组,长度根据需要而自动改变的数组。(大部分STL都是这样定义)在头文件下方要添加(都要加)typename也是一个STL容器,可以是任何的基本类型。1、在vector后面加上一个元素x,时间复杂度:O(1);2、删除vector的尾元素,时间复杂度:O(1);1、,vector本身可以作为数组使用,在一些元素个数不确定的场合可以很好的节省空间。有些场合需要根据一些条件把部分数据输出在同一行,数据中间用空格隔开。

qq_50563459的博客 1493

STL标准库常见面试题(一)

本博客内容: 参考:https://blog.csdn.net/tianya_team/article/details/50753759 https://www.cnblogs.com/wulala1119/p/4758345.html 一、vector的底层(存储)机制 二、vector的自增长机制 三、list的底层(存储)机制 四、什么情况下用vector,什么情况下用list ...

xiongluo0628的博客 5449

【C++】map和set

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考set文档介绍set是按照一定次序存储元素的容器;在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的;set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们;在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序;

2301_79585944的博客 1159

从Cartographer3D到LIO-SAM:主流3D激光SLAM算法怎么选?一份给机器人工程师的实战避坑指南

本文深入探讨了从Cartographer3D到LIO-SAM等主流3D激光SLAM算法的选型策略,为机器人工程师提供实战避坑指南。通过对比不同算法在传感器配置、环境特性和计算资源等方面的表现,帮助开发者根据项目需求选择最优方案,并分享传感器标定、资源优化等实用技巧。

weixin_27310985的博客 154

stl std::map容器排序及使用注意事项 .

01.#include "stdafx.h" 02.#include <map> 03.#include <iostream> 04. 05.int _tmain(int argc, _TCHAR* argv[]) 06.{ 07. /** 08. * map中的每个元素都是一个pair类型 09. ...

weixin_30702887的博客 204

Cursor+Apifox MCP Server实战:5分钟搞定API自动化测试用例生成

本文详细介绍了如何利用Cursor IDE与Apifox MCP Server,在5分钟内将API文档自动转化为高质量的自动化测试用例。通过配置MCP Server建立数据桥梁,开发者可直接用自然语言指令,让AI基于真实接口规范生成可立即执行的pytest测试代码,大幅提升接口测试效率,特别适合快节奏的SaaS项目。

ooo22的博客 534

set使用实例1+lower_bound(val)(个人模版)

set使用实例1+lower_bound(val): 1 #include<stdio.h> 2 #include<set> 3 #include<iostream> 4 #include<algorithm> 5 #include<string.h> 6 #include<map&g...

weixin_34055910的博客 127

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 399

【点云语义分割】Ubuntu20.04下RangeNet++环境配置与实战指南

本文详细介绍了在Ubuntu20.04系统下配置和运行RangeNet++点云语义分割模型的完整实战指南。内容涵盖从Cuda、cudnn到TensorRT的深度学习环境搭建,RangeNet++源码编译的详细步骤与常见问题解决,以及如何运行首个分割Demo并可视化结果。最后,还探讨了处理自定义点云数据格式和进行性能调优的进阶技巧,旨在帮助开发者和研究者快速部署并应用这一先进的点云语义分割技术。

rnn9storyteller的博客 516

代码随想录算法训练营day06|LeetCode 242,LeetCode 349,LeetCode 202,LeetCode 1

今天主要学习了哈希表的一系列操作,复习了一下set,map还有STL的用法!受益颇多!继续加油!加油,坚持打卡的第六天。

qq_44639909的博客 1264

Mac安装Typescript报错

根本原因是系统级目录的权限限制。推荐通过修改目录权限或使用nvm彻底解决问题。

江拥羡橙的博客 210

算法常用函数(不包含c++11新特性)

在算法题中,用库函数会减少我们很多代码量,这里来记录平时使用的比较多的方法。至于为什么不包含c++11新特性,是因为我基本不使用c++11,并且蓝桥杯也不允许使用c++11。(持续更新中)

m0_62796616的博客 396

一文读懂OpenClaw:核心组件与工作原理深度解析

Agent核心:负责理解意图、规划任务、协调执行消息系统:统一的消息格式,实现组件间解耦工具注册表:可扩展的工具系统,支持自定义工具模型适配层:多模型支持,统一API接口安全机制:沙箱隔离、权限确认、操作审计性能优化:并行执行、智能缓存、增量更新理解这些核心组件和工作原理,将帮助你更好地使用OpenClaw,也为后续开发自定义扩展打下坚实基础。在下一篇文章中,我们将详细介绍OpenClaw的界面操作,包括命令行与交互模式的各种技巧。

gaoxiang_120的专栏 833

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

yohnyang的博客 210

C++ set与map、unordered_map、unordered_set与哈希表

哈希表 表: 存储数据 key –> value; 用表来存储数据结构的困难:查找困难。一个一个key去比较去查找,效率不高。因此有了Hash算法加快查找; 将字符串的key,转成整数,使用整数找到对应的value;Hash算法将字符串转成整数,同样的Hash值的 key:v...

知识搬运工的博客 2万+

卫朋:IPD流程落地之产品开发验证阶段解读

IPD验证阶段

产品线负责人 1488

【C++】 使用红黑树模拟实现STL中的map与set

使用红黑树模拟实现STL中的map和set

m0_70980326的博客 1174

jre9下载 jdk9

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

手搓STL库中 ——《map && set》

我们从一开始接触map和set时就惊叹于这两个容器的强大之处,set可以高效的为我们进行排序去重,而map就像一个字典一样,不仅可以为我们实现去重排序,也可以帮助我们进行一一对应的查找。接下来我们又学习了AVL树和红黑树,我们也算是了解到了map和set的底层是基于红黑树实现的。因此现在我们已经具备对map和set进行自主实现了!在你阅读本章之前,你需要熟悉红黑树的特性,以及我们之前对list容器进行的自主实现。

weixin_72917087的博客 966

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++STL之set与map的使用

C++STL中map、set、multiset、multimap容器的使用,构造函数,迭代器,元素的插入删除、查找、修改等函数的介绍

be_a_struggler的博客 2889

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STL中map,set的使用

Map: 1.定义: Map是标准关联式容器之一,一个map是一个键值对序列,即(key ,value)对。它提供基于key的快速检索能力,在一个map中key值是唯一的。2.Map常用的方法主要有:insert,erase,size,count,begin,end,find,clear,empty。insert方法:在map中插入一个元素,map中记录的元素通常为键值对,所以,在存储时会把,键

qq_35118894的博客 555

STL详解(十一)—— 用一棵红黑树同时封装出map和set

文章目录 用一棵红黑树同时封装出map和set

2021dragon的博客 5307

STL容器 map 与 set 的用法

认识pair在介绍容器之前,我们先来介绍一下pair,pair是一种结构体模板类型,每个pair可以存储两个值,这两个值的类型可以是任何类型的。它定义在 #include< uitility >中。在set map中使用pair的原因是让他们可以底层封装公用同一棵红黑树。定义在 uitility文件中的pair 结构体模板部分代码。template<class _Ty1, class _Ty

Meliorem的博客 485

map与set

摘要:C++ STL中的map和set是基于红黑树实现的有序关联容器,map存储键值对(key-value),set存储单一键值(key)。两者均具有自动排序、高效查询(O(logn))和动态调整能力,区别在于map支持键值关联查询而set专注于数据去重。工业级应用包括配置管理(map)、数据统计(multiset)等场景。开发时需注意:1)迭代器有效性;2)自定义类型作为key需重载比较运算符;3)多线程环境下需加锁保护;4)根据有序性需求选择红黑树或哈希表实现。map/set通过红黑树的自平衡特性保证稳

m0_62807361的博客 1759

C++效率掌握之STL库:map && set底层剖析及迭代器万字详解

map、set的封装可以说是很天才的底层结构了,本篇将对其结构进行详细的解析,虽然会很复杂且难以理解,但是学完成就感满满,而且对底层理解和面试很有帮助

Zero_VPN的博客 2650
上一篇: 数组--5-最小的K个数
下一篇: 排序--2-归并排序
ax_hacker
博客等级 码龄11年 6粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值