波奇学C++:map和set

news2024/10/7 10:14:16

Set的底层是红黑树,红黑树是一种搜索二叉树。

Set的优势在于搜索速度上,搜索key值的时间赋值度是logn。

Set可以实现去重+排序的操作,已有的值不再重复插入,插入的数据自动排序

和其他数据结构一样set支出insert,erase,find等操作

set<int> s;
s.insert(1);
s.insert(2);
s.erase(2);
s.find(3);

访问set可以通过迭代器访问

auto si = s.begin();
while (si != s.end())
{
	cout << *si;
	si++;
}

对set的访问本质上是对一个搜索树的中序遍历。

set的特殊之处,当set的key是结构体时,可以传一个仿函数,定义比较key的大小规则

s.count()计算key是否存在,存在返回key个数,不存在返回0

set<int> s;
s.insert(1);
s.insert(4);
s.insert(5);
cout << s.count(3); // result:0
cout<<s.count(4); // result: 1

 lower_bound()和upper_bound()返回值用作erase的迭代器参数

set<int> s;
	for (int i = 0; i < 10; i++)
	{
		s.insert(i);
	}
	// 0,1,2,3,4,5,6,7,8,9,10
	auto itlow = s.lower_bound(3);
	auto itupper = s.upper_bound(4);
	cout << *itlow; //3
	cout << *itupper; //5 
	s.erase(itlow, itupper);
	cout << endl;
	auto si = s.begin();
	while (si != s.end())
	{
		cout << *si;
		si++;
	}
	cout << endl;

lower_bound,upper_bound表示删除3到4的范围包括3和4,所以*itlow>=3,itupper>4,itupper大于4的原因是erase迭代器是[ itlow, itupper).

当lower_bound和upper_bound传入一个不存在的值时。erase不会有任何改变。

s.insert(1);
s.insert(3);
itlow=s.low_bound(2);
itupper=s.upper_bound(2);
cout<<*itlow //3
cout<<*itupper //3
s.erase(itlow,itupper)// [3,3)

equal_range()返回一个结构体,结构体的两个成员变量分别是迭代器。

我们不妨将pair看成是c++返回两个值时的解决方法。

在set中equal_range可以看成lower_bound+upper_bound的结合体。

auto sr = s.equal_range(3);
cout << *sr.first; // 3
cout << *sr.second; // 4

在multiset中,equal_range可以实现去除操作

multiset允许重复的值比set

multiset<int> ms;
for (int i = 0; i < 10; i++)
{
  ms.insert(i);
}
ms.insert(4);
ms.insert(4);
ms.insert(4);
auto ims = ms.equal_range(4);
cout << *ims.first;// 4
cout << *ims.second;// 5
ms.erase(ims.first, ims.second);

打印的结构是012356789;把4全都去掉。

当equal_range的值不存在时()会报错。

Map的底层也是搜索树,和set相比,他可以存两个值,key和value,set只存key,两者都是通过key来比较排序。

map<string,string> dict;
dict['apple']='taste';

图的初始化

pair<string, string> kv1("insert", "插入");
dict.insert(kv1);
dict.insert({ "string","字符串" }); // 隐式转换
dict.insert(make_pair("string", "排序"));// 匿名变量

图不是直接定义两个变量而是先定义pair结构体再插入进去。

注意,隐式转换的写法,C++11才支持双变量的隐式转换的写法。

当图的key相同时,插入不会覆盖也不会增加,所以图的key应该是唯一的。

map的[]

map<string,string> dict;
dict['apple']='taste';
dict['banana'];

当key为apple存在时,不作改变,当不存在时插入新的pair。

当key为banana存在时如上,当key不存在时,创建新的pair,value为用string的构造函数初始化。

map的访问

void test3()
{
	map<string, int> dict;
	dict.insert({ "apple", 4});
	for (auto e : dict)
	{
		cout << e.first;
	}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ctfshow web入门 php特性 web126-web130

1.web126 和前面一样的 payload&#xff1a; get: a1fl0gflag_give_me post: CTF_SHOW&CTF[SHOW.COM&funparse_str($a[1]) 或 get: ?$fl0gflag_give_me post:CTF_SHOW&CTF[SHOW.COM&funassert($a[0]) assert($a[0]) 是把fl0g赋值为flag_give_me $a[0]是当前…

​【Java】面向对象程序设计 课程笔记 面向对象基础

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;Java &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对你有…

数仓使用SQL脚本在数据库中添加初始数据示例

文章目录 需要在虚拟机上开启数据库 点击确定后&#xff0c;可以点开这个连接&#xff0c;查看数据库信息 运行 init_mysql.sql 创建mall 数据库 -- 设置sql_mode set sql_mode NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES;-- 创建数据库mall create database mall;-- 切换数…

FL水果21编曲宿主软件最新版本更新下载使用教程

rt&#xff0c;楼主受术曲和jpop等影响&#xff0c;重新回到了FL编曲圈中来。目前&#xff0c;正在整理一份关于FL界面、快捷键操作、插件音源、风格制作等汇总笔记&#xff0c;笔记内容来源于来自于网上和个人的编曲经历的理解而成&#xff0c;欢迎大家为笔记的制作与完善提供…

【代码阅读笔记】yolov5 rknn模型部署

一、main函数思路 二、值得学习的地方 1、关注yolov5检测流程 2、其中几个重要的结构体 typedef struct {int left;int right;int top;int bottom; } YOLOV5_BOX_RECT; // box坐标信息typedef struct {char name[YOLOV5_NAME_MAX_SIZE];int class_index;YOLOV5_BOX_RECT box…

【重拾计划】深搜广搜 | luogu P1135 奇怪的电梯

luogu P1135 奇怪的电梯 题目描述方法一 : 深搜dfs方法二&#xff1a;广搜bfs其他解法 题目描述 luogu P1135 奇怪的电梯 方法一 : 深搜dfs 从点A出发&#xff0c;找到符合条件的点一直往下搜即可 代码实现如下&#xff1a; #include<iostream> #include<cstdio…

PS 图层剪贴蒙版使用方法

好 我们先打开PS软件 后面我们需要接触图框工具 在学习图框工具之前 先要掌握剪贴蒙版 这里 我们先点击左上角文件 然后选择新建 我们先新建一个画布出来 然后 我们点击 箭头指向处 新建一个空白图层 点击之后 会就多出一个空白图层 我们在这里 找到 矩形选框工具 然后 …

windows环境下使用mmdetection+mmdeploy训练自定义数据集并转成onnx格式部署

目录 实验环境安装conda创建虚拟环境安装pytorch使用 MIM 安装 MMEngine 和 MMCV安装 MMDetection准备自定义数据集修改配置信息开始训练模型转换与推理 实验环境 windows10python&#xff1a;3.8pytorch :1.8.1cuda&#xff1a;11.1mmdet&#xff1a;3.1.0mmcv&#xff1a;2.…

想要精通算法和SQL的成长之路 - 验证二叉树

想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下&#xff1a; 对于一颗二叉树&#xff0c;我们需要做哪些校验&#xff1f; 首先…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现&#xff0c;对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

C++篮球俱乐部管理系统

一、 本系统的设计 篮球俱乐部管理系统是一个用于管理篮球俱乐部日常运营和球队管理的软件系统。它提供了一套功能齐全的工具&#xff0c;帮助篮球俱乐部进行会员管理、训练计划安排、比赛管理、场地预订以及财务记录等方面的工作。 该管理系统的主要特点和功能包括&#xff…

fcpx插件:82种复古电影胶卷框架和效果mFilm Matte

无论您是在制作音乐剪辑、私人假期视频还是大型广告活动&#xff0c;这个专业的插件都将帮助您为您的镜头赋予真正的电影角色。 复古效果在任何视频中都能立即识别出来&#xff0c;增添了感伤的复古氛围&#xff0c;并使镜头更具说服力。使用 mFilm Matte 轻松实现这些特征&…

通过人才测评系统,对程序员岗位进行招聘测评

一、 程序员的基本工作内容 1、 负责项目组内的代码维护和更新迭代&#xff0c;保证研发效率&#xff0c;对于运营产品提出的需求应积极沟通并实现。 2、 规范相关开发文档等相关资料&#xff0c;对于有变更的代码和功能需求&#xff0c;要对开发文档做出相应的变更。 3、 作为…

从0开始深入理解并发、线程与等待通知机制(上)含大厂面试题

目录 一&#xff0c;基础概念 进程与线程 进程&#xff08;就是一代代码的执行程序&#xff0c;程序的实例&#xff09; 线程 大厂面试题&#xff1a;进程间的通信 CPU 核心数和线程数的关系 上下文切换&#xff08;Context switch&#xff09; 并行和并发 二&#xff0c;认识…

SwiftUI 4.0:两种方式实现子视图导航功能

0. 概览 从 SwiftUI 4.0 开始&#xff0c;觉悟了的苹果毅然抛弃了已“药石无效”的 NavigationView&#xff0c;改为使用全新的 NavigationStack 视图。 诚然&#xff0c;NavigationStack 从先进性来说比 NavigationView 有不小的提升&#xff0c;若要如数家珍得单开洋洋洒洒…

Leetcode---114双周赛

题目列表 2869. 收集元素的最少操作次数 2870. 使数组为空的最少操作次数 2871. 将数组分割成最多数目的子数组 2872. 可以被 K 整除连通块的最大数目 一、收集元素的最小操作次数 直接模拟&#xff0c;倒序遍历即可&#xff0c;代码如下 class Solution { public:int mi…

ROS(5)PX4仿真安装及运行

1、配置&#xff0c;提升下载速度 启动 $ cd clash-for-linux$ sudo bash start.sh$ source /etc/profile.d/clash.sh$ proxy_on 关闭 $ cd clash-for-linux$ sudo bash shutdown.sh$ proxy_off 2、安装PX4开源无人机 git clone https://github.com/PX4/PX4-Autopilot.git…

全栈开发笔记1:首个项目的收获

本文为编程导航实战项目学习笔记。 文章目录 7.跨域问题解决 2023.10.26.项目部署 2023.10.15.统一处理返回值 2023.10.14.开发注册和用户管理 2023.09303.开发登陆注册接口 2023.09.172.数据库设计1.前后端初始化 2023.9.16 7.跨域问题解决 2023.10.2 三种方式&#xff1a; …

ps插件:alpaca增效工具 (完美替代AI创成式填充) 2.8.1 中文版

Alpaca是一个Photoshop插件&#xff0c;提供了多种功能&#xff0c;帮助用户更高效地进行图像处理和设计。可以进行模型训练并无缝地融入图像中。同时还提供文本到图像的生成、图像到图像的变化、涂色、放大、深度图创建等功能&#xff0c;极大地提升了设计和艺术创作的效率和创…

Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!

目录 一、Go的关键字列表和分类介绍关键字在Go中的定位语言的基石简洁与高效可扩展性和灵活性 关键字分类声明各种代码元素组合类型的字面表示基本流程控制语法协程和延迟函数调用 二、Go的关键字全代码示例关键字全代码示例 三、Go的标识符定义基础定义特殊规定关键字与标识符…