蓝桥杯-常用STL(二)

常用STL

  • 🎈1.集合
  • 🎈2.set的基础使用
    • 🔭2.1引入库
    • 🔭2.2插入元素
    • 🔭2.3删除元素
    • 🔭2.4判断元素是否存在
    • 🔭2.5遍历元素
    • 🔭2.6清空
  • 🎈3.set与结构体

🎈1.集合

🔎集合是数学中的一个基本概念,通俗的理解,集合就是一些不重复的数据组成的。比如{1,2,3}就是一个有1,2,3三个元素的集合。在C++中,我们常用的集合是set

🎈2.set的基础使用

🔭2.1引入库

C++set的实现是在一个<set>头文件中,在代码开头引入这个头文件,并且同样加上一句using namespace std;

🔭2.2插入元素

C++中用insert()函数向集合中插入一个新的元素。注意如果集合中已经存在了某个元素,再次插入不会产生任何效果,集合中是不会出现重复元素的。

#include <set>
#include <iostream>
using namespace std;
int main()
{set<string> country;//{}country.insert("China");//{"China"}country.insert("America");//{"China","America"}country.insert("France");//{"China","America","France"}country.insert("China");//{"China","America","France"}return 0;
}

🔭2.3删除元素

C++中用erase()函数删除集合中的一个元素,如果集合不存在这个元素,不进行任何操作。

#include <set>
#include <iostream>
using namespace std;
int main()
{set<string> country;//{}country.insert("China");//{"China"}country.insert("America");//{"China","America"}country.insert("France");//{"China","America","France"}country.insert("China");//{"China","America","France"}country.erase("China");//{"America","France"}country.erase("England");//{"America","France"}
}

🔭2.4判断元素是否存在

C++中如果你想知道某个元素是否在集合中出现,你可以直接用count()函数。如果集合中存在我们要查找的元素,返回1,否则返回0

#include <set>
#include <iostream>
using namespace std;
int main()
{set<string> country;//{}country.insert("China");//{"China"}country.insert("America");//{"China","America"}country.insert("France");//{"China","America","France"}if (country.count("China"))cout << "China belong to country." << endl;return 0;
}

在这里插入图片描述

🔭2.5遍历元素

C++通过迭代器可以访问集合中的每个元素,迭代器就好像一根手指指向set中发某个元素。通过操作这个手指,我们可以改变它要指向的元素。通过*(解引用操作符)操作可以获取迭代器指向的元素。通过++操作让迭代器指向下一个元素,同理,--操作让迭代器指向上一个元素。
迭代器的写法比较固定,set<T>::iterator it就定义了一个指向set<T>这种集合的迭代器it,T是任意的数据类型。其中::iterator是固定的写法。begin函数返回容器中起始元素的迭代器,end函数返回容器的尾后迭代器。

#include <set>
#include <iostream>
using namespace std;
int main()
{set<string> country;//{}country.insert("China");//{"China"}country.insert("America");//{"China","America"}country.insert("France");//{"China","America","France"}for (set<string>::iterator it = country.begin(); it != country.end(); it++){cout << *it << " ";}cout << endl;return 0;
}

在这里插入图片描述
❗**注意:**在C++中遍历set是从小到大遍历的,也就是说set会帮我们排好序。

🔭2.6清空

C++中调用clear()函数就可以清空set,同时会清空set占用的内存。

🎈3.set与结构体

set经常会配合结构体来使用,用set来储存结构体和vector有些区别。正如我们前面所说的那样,set是需要经过排序的,系统自带的数据类型有默认的比较大小的规则,而我们自定义的结构体,系统是不可能知道这个结构体比较大小的方式的。所以,我们需要用一种方式来告诉系统怎么比较这个结构体的大小。其中一种方法叫运算符重载,我们需要重新定义小于符号。

struct Node
{int x, y;bool operator<(const Node& rhs)const {if (x == rhs.x)return y < rhs.y;elsereturn x < rhs.x;}
};

operator<表示我们要重载运算符<,可以看成一个函数名。rhs是“right hand side”的简称,有右操作数的意思,这里我们定义为一个const引用。因为该运算符重载定义在结构体内部,左操作数就当前调用operator<的对象。
特别要注意,不要漏掉最后的const,const函数表示不能对其他数据成员进行修改操作,并且const对象不能调用非const成员函数,只允许调用const成员函数。
上面重载规定了排序方式为:优先依照x从小到大排序,如果x相同,那么再按照y从小到大排序。经过了<运算符重载的结构体,我们就可以比较两个Node对象的大小了,因此可以直接储存在set中了。

✅通过上面的学习,我们学会用set来储存一个二维坐标系上的点的集合。接下来,我们来给这个结构体添加<的运算符重载,让编译器知道该怎么对这个结构体比较大小。

#include <iostream>
#include <set>
using namespace std;
struct Point
{int x;int y;bool operator<(const Point& rhs)const{if (x == rhs.x)return y < rhs.y;elsereturn x < rhs.x;}
};
int main()
{int n;set<Point>v;cin >> n;for (int i = 0; i < n; i++){Point temp;cin >> temp.x >> temp.y;v.insert(temp);}cout << "排序后:" << endl;for (set<Point>::iterator it = v.begin(); it != v.end(); it++){cout << it->x << " " << (*it).y << endl;}return 0;
}

在这里插入图片描述

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

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

相关文章

【Algorithms 4】算法(第4版)学习笔记 04 - 2.1 初级排序算法

文章目录 前言参考目录学习笔记1&#xff1a;前置说明1.1&#xff1a;全序关系1.2&#xff1a;Comparable API 实现 demo1.3&#xff1a;排序算法模板2&#xff1a;选择排序2.1&#xff1a;内循环实现过程拆解2.2&#xff1a;代码实现2.3&#xff1a;特点3&#xff1a;插入排序…

【kubernetes】集群网络(二):Flannel的VxLan、Host-GW模式

文章目录 1 Pod的IP地址的分配2 CNI3 Flannel3.1 Flannel的安装3.2 VxLan3.3 Host-GW 4 总结 1 Pod的IP地址的分配 当节点上只安装了docker&#xff0c;则会用veth pairdocker0实现单个节点上容器之间的通信&#xff0c;并且这些容器都在同一个IP段&#xff0c;如果不修改&…

(2024,SaFaRI,双三上采样和 DFT,空间特征和频率特征)基于扩散模型的图像空间和频率感知恢复方法

Spatial-and-Frequency-aware Restoration method for Images based on Diffusion Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 修改数据保真度 3.2 …

JMeter GUI:测试计划和工作台

什么是测试计划&#xff1f; 测试计划是您添加 JMeter 测试所需元素的地方。 它存储运行所需测试所需的所有元素&#xff08;如线程组、计时器等&#xff09;及其相应的设置。 下图显示了测试计划的示例 测试计划是您添加 JMeter 测试所需元素的地方。 它存储运行所需测试…

Modbus协议学习第六篇之基于libmodbus库的示例程序(可以联合Modbus模拟仿真软件进行调试)

前置工作 学了这么多Modbus的知识&#xff0c;如果不进行实际的操作&#xff0c;总感觉懂的不透彻。基于此&#xff0c; 本篇博文就带各位读者来了解下如何通过编写程序来模拟与Modbus Slave仿真软件的通讯。当然了&#xff0c;这里有两个前提&#xff0c;如下&#xff1a; 1.请…

【深度强化学习】Python:OpenAI Gym-CarRacing 自动驾驶 | 提供项目完整代码 | 车道检测功能 | 路径训练功能 | 车辆控制功能

💭 写在前面:本篇是关于 OpenAI Gym-CarRacing 自动驾驶项目的博客,面向掌握 Python 并有一定的深度强化学习基础的读者。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车…

一键部署幻兽帕鲁服务器免费一年方案

一、背景介绍 简单讲一下历程&#xff0c;幻兽帕鲁从在1月19日上线&#xff0c;24小时内在线人数峰值便突破200万&#xff0c;作为2024年第一款现象级游戏&#xff0c;《幻兽帕鲁》上线后&#xff0c;由于人数太多&#xff0c;频现服务器过载导致游戏卡顿掉线的情况。为了能够…

【GitHub项目推荐--大语言模型课程】【转载】

Large Language Model Course Large Language Model Course&#xff08;大型语言模型课程&#xff09;是一个开源项目&#xff0c;该课程分为三个部分&#xff1a; LLM 基础&#xff1a;涵盖了数学、Python 和神经网络的基础知识。 LLM 科学家&#xff1a;专注于学习如何使用…

【机器学习】基于K-近邻的车牌号识别

实验四: 基于K-近邻的车牌号识别 1 案例简介 ​ 图像的智能处理一直是人工智能领域广受关注的一类技术&#xff0c;代表性的如人脸识别与 CT 肿瘤识别&#xff0c;在人工智能落地的进程中发挥着重要作用。其中车牌号识别作为一个早期应用场景&#xff0c;已经融入日常生活中&…

LVGL部件7

一.图片部件 1.知识概览 2.函数接口 1.lv_img_set_pivot 在LVGL&#xff08;LittlevGL&#xff09;中&#xff0c;要设置图像对象的旋转中心点&#xff0c;可以使用 lv_img_set_pivot 函数。该函数的原型如下&#xff1a; void lv_img_set_pivot(lv_obj_t * img, lv_coord_…

Flask框架开发学习笔记《5》简易服务器代码

Flask框架开发学习笔记《5》 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 简易服务器代码 接口解析那一块很关键&#xff0c;学后端服务器这一块&#xff0c;感觉主要就是学习相应地址的接口怎么处理。 然后写清楚每个地址…

在centos 7 中安装配置Jdk、Tomcat、及Tomcat自启动

目录 一、安装配置Jdk 1.创建目录并上传文件 2.解压JDK压缩包 3.配置JDK环境变量 4.设置环境变量生效 二、安装配置Tomcat 1.上传Tomcat并解压 2.启停Tomcat 3.修改tomcat-user.xml配置 4.配置远程访问Tomcat 5.远程项目发布 三.Tomcat自启动配置 1.配置Tomcat自启…

各大厂急招鸿蒙开发员,争抢鸿蒙工程师

余承东宣布鸿蒙原生应用全面启动&#xff0c;华为开始了全面抛弃安卓的进程。 多家互联网公司也发布了鸿蒙OS的App开发工程师的岗位&#xff0c;开启了抢人大战。 有的企业开出了近百万的年薪招聘鸿蒙OS工程师&#xff0c;而华为甚至为鸿蒙OS资深架构师开出了100万-160万元的…

Kotlin快速入门系列10

Kotlin的委托 委托模式是常见的设计模式之一。在委托模式中&#xff0c;有两个对象参与处理同一个请求&#xff0c;接受请求的对象将请求委托给另一个对象来处理。与Java一样&#xff0c;Kotlin也支持委托模式&#xff0c;通过关键字by。 类委托 类的委托即一个类中定义的方…

Mysql-ReadView + MVCC-RR 与 RC

实验准备 创建脚本 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,age int(11) NULL DEFAULT NULL,addr varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,PRIMARY …

Red Panda Dev C++项目的基本操作

最近在Red Panda Dev C上面编写程序时发现&#xff0c;很多小伙伴都会创建项目。今天我带大家看看如何使用一个项目。 一、项目的创建 创建项目 首先&#xff0c;我们需要创建一个项目。 1、打开Red Panda Dev C。 2、点击 “文件[F]” → “新建[N]” → “项目[P]...”&…

精选70套前端数据可视化大屏

分享70款还不错的前端数据可视化大屏源码 其中包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 你可以点击在线预览查看该源码资源的最终展示效果…

从零搭建Vue3 + Typescript + Pinia + Vite + Tailwind CSS + Element Plus开发脚手架

项目代码以上传至码云&#xff0c;项目地址&#xff1a;https://gitee.com/breezefaith/vue-ts-scaffold 文章目录 前言脚手架技术栈简介vue3TypeScriptPiniaTailwind CSSElement Plusvite 详细步骤Node.js安装创建以 typescript 开发的vue3工程集成Pinia安装pinia修改main.ts创…

正点原子--STM32定时器学习笔记(1)(更新中....)

F1系列基本定时器&#xff08;TIM6 / TIM7&#xff09; 我们的目标是通过TIM6基本定时器定时500ms&#xff0c;让LED0每隔500ms闪一下&#xff01; 思路&#xff1a;使用定时器6&#xff0c;实现500ms产生一次定时器更新中断&#xff0c;在中断里执行“翻转LED0”。 定时器什…

docker容器之consul

一、consul解决了什么问题&#xff1f; 如果后端应用服务器集群节点数量很多&#xff0c;前端负载均衡器配置和管理会很麻烦的问题 &#xff08;负载均衡器的节点配置条目数量会很多&#xff0c;后端节点的网络位置发生了变化还需要修改所有调用这些后端节点的负载均衡器配置等…