当前位置: 首页 > news >正文

【C++】set/multiset容器

1.set基本概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;//set容器构造和赋值
#include<set>//遍历
void printSet(const set<int>& st)
{for (set<int>::const_iterator it = st.begin(); it != st.end(); it++){cout << *it << " ";}//换行cout << endl;
}
//set容器构造和赋值
void test01()
{set<int>st1; // 创建set容器//插入数据 只有insert方式st1.insert(10);st1.insert(20);st1.insert(50);st1.insert(30);st1.insert(40);st1.insert(30);//打印输出printSet(st1);//set容器特点:所有元素插入时自动被排序//set容器不允许插入重复值//operator= 赋值set<int>st2;st2 = st1;printSet(st1);//拷贝构造set<int>st3(st2);printSet(st3);
}int main()
{ test01();//**************************************system("pause");return 0;
} 

在这里插入图片描述

2.set大小和交换

在这里插入图片描述

在这里插入图片描述

#include <iostream>
using namespace std;//set容器 大小和交换
#include<set>
//遍历set容器
void printSet(const set<int>& s)
{for (set<int>::const_iterator it = s.begin(); it != s.end(); it++){cout << *it << " ";}cout << endl;
}
//大小
void test01()
{set<int>s1;//set容器只能用insert插入数据s1.insert(10);s1.insert(50);s1.insert(30);s1.insert(40);s1.insert(20);//打印容器printSet(s1);//判断容器是否为空if (s1.empty()){cout << "s1为空" << endl;}else{cout << "s1不为空" << endl;cout << "s1大小为 " << s1.size() << endl; //输出s1元素个数}}//交换
void test02()
{//创建set容器1set<int>s1;s1.insert(10);s1.insert(50);s1.insert(30);s1.insert(40);s1.insert(20);//创建set容器2set<int>s2;s2.insert(100);s2.insert(400);s2.insert(300);s2.insert(500);s2.insert(200);cout << "交换前:" << endl;printSet(s1);printSet(s2);//交换s1和s2容器cout << "交换后:" << endl;printSet(s1);printSet(s2);
}int main()
{ test01();cout << "-------------" << endl << endl;test02();//**************************************system("pause");return 0;
} 

在这里插入图片描述

3.set插入和删除

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;//set容器 插入和删除
#include<set>
void printSet(const set<int>& s)
{for (set<int>::const_iterator it = s.begin(); it != s.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{//创建set容器set<int>s1;//插入s1.insert(50);s1.insert(30);s1.insert(10);s1.insert(20);s1.insert(40);//打印printSet(s1);//删除s1.erase(s1.begin());printSet(s1);//删除重载版本s1.erase(30);printSet(s1);//清空//s1.erase(s1.begin(), s1.end()); //利用区间的方式s1.clear(); // 利用clear()成员函数printSet(s1);
}int main()
{ test01();//cout << "-------------" << endl << endl;//test02();//**************************************system("pause");return 0;
} 

在这里插入图片描述

4.set查找和统计

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;//set容器 查找和统计
#include<set>
void test01()
{set<int>s1;s1.insert(30);s1.insert(20);s1.insert(50);s1.insert(10);s1.insert(40);//查找//查找元素30并返回set迭代器set<int>::iterator pos = s1.find(30);if (pos != s1.end())  // 找不到 则返回s1.end()迭代器{cout << "找到元素:" << *pos << endl;}else{cout << "未找到元素!" << endl;}//统计//统计30元素的个数int num = s1.count(30);//对于set而言,统计结果 要么是0要么是1cout << "num = " << num << endl;
}int main()
{ test01();//cout << "-------------" << endl << endl;//test02();//**************************************system("pause");return 0;
} 

在这里插入图片描述

5.set和multiset区别

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;//set容器 和multiset容器的区别
#include <set>
void test01()
{//创建set容器set<int>s;//pair<iterator, bool> 使用insert返回值类型pair<set<int>::iterator, bool> ret = s.insert(10);if (ret.second){cout << "第一次插入成功  " << "插入的数据为:" <<  *ret.first << endl;}else{cout << "第一次插入失败" << endl;}//再次插入相同的数ret = s.insert(10);if (ret.second){cout << "第一次插入成功" << *ret.first << endl;}else{cout << "第一次插入失败" << endl;}//创建multisetmultiset<int>ms;//允许插入重复值ms.insert(20);ms.insert(20);for (multiset<int>::iterator it = ms.begin(); it != ms.end(); it++){cout << *it << " ";}cout << endl;
}int main()
{ test01();//cout << "-------------" << endl << endl;//test02();//**************************************system("pause");return 0;
} 

在这里插入图片描述

6.pair对组创建

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;//pair对组创建
void test01()
{//第一种方式pair<string, int>p("Tom", 20);cout << "姓名:" << p.first << "\t年龄:" << p.second << endl;//第二种方式pair<string, int>p2 = make_pair("Jerry", 30);cout << "姓名:" << p2.first << "\t年龄:" << p2.second << endl;
}int main()
{test01();//cout << "-------------" << endl << endl;//test02();//**************************************system("pause");return 0;
} 

在这里插入图片描述

7.set容器排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;//set容器排序
#include <set>class MyCompare
{
public:bool operator()(int v1, int v2){return v1 > v2;}
};void test01()
{set<int, MyCompare>s1;s1.insert(30);s1.insert(20);s1.insert(40);s1.insert(10);//从大到小排序for (set<int, MyCompare>::iterator it = s1.begin(); it != s1.end(); it++){cout << *it << " ";}cout << endl;
}int main()
{test01();//cout << "-------------" << endl << endl;//test02();//**************************************system("pause");return 0;
} 

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;// set容器排序, 存放自定义数据类型
#include <set>class Person
{
public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};class ComparePerson
{
public:bool operator()(const Person&p1,const Person&p2){//按照年龄进行排序 降序return p1.m_Age > p2.m_Age;}
};void test01()
{//自定义数据类型 都会指定排序规则set<Person, ComparePerson>s;//创建Person对象Person p1("刘备", 24);Person p2("关羽", 28);Person p3("张飞", 25);Person p4("赵云", 21);//将数据插入容器中s.insert(p1);s.insert(p2);s.insert(p3);s.insert(p4);for (set<Person, ComparePerson>::iterator it = s.begin(); it != s.end(); it++){cout << "姓名:" << it->m_Name << "\t年龄:" << it->m_Age << endl;}
}int main()
{test01();//cout << "-------------" << endl << endl;//test02();//**************************************system("pause");return 0;
} 

相关文章:

【C++】set/multiset容器

1.set基本概念 #include <iostream> using namespace std;//set容器构造和赋值 #include<set>//遍历 void printSet(const set<int>& st) {for (set<int>::const_iterator it st.begin(); it ! st.end(); it){cout << *it << " …...

docker拉取镜像时报错Error response from daemon: Head ““no basic auth credentials

一&#xff1a;场景&#xff1a;新搭建一台服务器&#xff0c;需要拉取公司私有镜像仓库。 docker拉取私有仓库报如下错误: Error response from daemon: Head "" no basic auth credentials 二&#xff1a;解决方式 docker私有仓库需要登录授权&#xff0c;因此…...

Redis消息传递:发布订阅模式详解

目录 1.Redis发布订阅简介 2.发布/订阅使用 2.1 基于频道(Channel)的发布/订阅 2.2 基于模式(pattern)的发布/订阅 3.深入理解Redis的订阅发布机制 3.1 基于频道(Channel)的发布/订阅如何实现的&#xff1f; 3.2 基于模式(Pattern)的发布/订阅如何实现的&#xff1f; 3.3 Sp…...

最强自动化测试框架Playwright(36)- 句柄

剧作家可以为页面 DOM 元素或页面内的任何其他对象创建句柄。这些句柄存在于 Playwright 进程中&#xff0c;而实际对象位于浏览器中。有两种类型的句柄&#xff1a; JSHandle 引用页面中的任何 JavaScript 对象ElementHandle 引用页面中的 DOM 元素&#xff0c;它具有额外的方…...

推荐一个绘图平台(可替代Visio)

不废话&#xff0c;简易记网址&#xff1a; draw.io 网站会重定向到&#xff1a;https://app.diagrams.net/...

【探索Linux】—— 强大的命令行工具 P.6(调试器-gdb、项目自动化构建工具-make/Makefile)

阅读导航 前言一、什么是调试器二、详解 GDB - 调试器1.使用前提2.经常使用的命令3.使用小技巧 三、项目自动化构建工具 - make/Makefile1. make命令⭕语法⭕常用选项⭕常用操作⭕make命令的工作原理⭕make命令的优势&#xff1a; 2.Makefile文件⭕Makefile的基本结构⭕Makefil…...

echarts-convert.js使用

echarts-convert.js demo 点击下载 1、本地安装phantom.js插件 window版本下载 2、更改文件路径 &#xff08;D:\phantomjs-2.1.1-windows\bin&#xff09;改为本地项目文件路径 3、打开cmd命令行&#xff0c;并格式化语言 运行以下命令 将命令行语言改为中文简体 chcp…...

数据结构之队列详解(包含例题)

一、队列的概念 队列是一种特殊的线性表&#xff0c;特殊之处在于它只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作&#xff0c;和栈一样&#xff0c;队列是一种操作受限制的线性表。进行插入操…...

Prometheus的搭建与使用

一、安装Prometheus 官网下载地址&#xff1a;Download | Prometheus 解压&#xff1a;tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名&#xff1a; mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录&#xff1a; cd /home/prometheus查看配置文件&am…...

实战指南,SpringBoot + Mybatis 如何对接多数据源

系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难&#xff0c;MyBatis动态Sql标签解析 从零开始&#xff0c;手把手教你搭建Spring Boot后台工程并说明 Spring框架与SpringBoot的关联与区别 Spring监听器…...

论文阅读——Imperceptible Adversarial Attack via Invertible Neural Networks

Imperceptible Adversarial Attack via Invertible Neural Networks 作者&#xff1a;Zihan Chen, Ziyue Wang, Junjie Huang*, Wentao Zhao, Xiao Liu, Dejian Guan 解决的问题&#xff1a;虽然视觉不可感知性是对抗性示例的理想特性&#xff0c;但传统的对抗性攻击仍然会产…...

List和ObservableCollection和ListBinding在MVVM模式下的对比

List和ObservableCollection和ListBinding在MVVM模式下的对比 List 当对List进行增删操作后&#xff0c;并不会对View进行通知。 //Employee public class Employee : INotifyPropertyChanged {public event PropertyChangedEventHandler? PropertyChanged;public string N…...

insightface安装过程中提示 Microsoft Visual C++ 14.0 or greater is required.

pip install insightface安装过程中提示 Microsoft Visual C 14.0 or greater is required.Get it with "Microsoft C Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 根据提示网站访问官网下载生成工具 打开软件后会自动更新环境&#…...

mongodb数据库

目录 一、数据库 二、文档 三、集合 四、元数据 五、MongoDB 数据类型 1、ObjectId 2、字符串 3、时间戳 4、日期 一、数据库 一个 mongodb 中可以建立多个数据库。 MongoDB 的默认数据库为"db"&#xff0c;该数据库存储在 data 目录中。 MongoDB 的单…...

OpenCV-Python中的图像处理-图像特征

OpenCV-Python中的图像处理-图像特征 图像特征Harris角点检测亚像素级精度的角点检测Shi-Tomasi角点检测SIFT(Scale-Invariant Feature Transfrom)SURF(Speeded-Up Robust Features)FAST算法BRIEF(Binary Robust Independent Elementary Features)算法ORB (Oriented FAST and R…...

Ajax入门+aixos+HTTP协议

一.Ajax入门 概念:AJAX是浏览器与服务器进行数据通信的技术 axios使用: 引入axios.js使用axios函数:传入配置对象,再用.then回调函数接受结果,并做后续处理 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>01.axios使用…...

conda创建虚拟环境

创建虚拟环境是在计算机上设置一个独立的空间&#xff0c;用于安装和运行特定版本的软件和依赖项&#xff0c;以避免与系统其他部分的冲突。 创建虚拟环境&#xff1a; conda create --name myenv python3.8 这将创建一个名为myenv的虚拟环境&#xff0c;并安装Python 3.8版本。…...

Golang服务的请求调度

文章目录 1. 写在前面2. SheddingHandler的实现原理3. 相关方案的对比4. 小结 1. 写在前面 最近在看相关的Go服务的请求调度的时候&#xff0c;发现在gin中默认提供的中间件中&#xff0c;不含有请求调度相关的逻辑中间件&#xff0c;去github查看了一些服务框架&#xff0c;发…...

Jenkins的流水线启动jar后未执行问题处理

现象 在流水线里配置了启动脚本例如&#xff0c;nohup java -jar xxx.jar >nohup.out 2>&1 & 但是在服务器发现服务并未启动,且nohup日志里没输出日志,这样的原因是jenkins在执行完脚本后&#xff0c;就退出了这个进程。 在启动脚本执行jar命令的上一步加入以下…...

智慧工地平台工地人员管理系统 可视化大数据智能云平台源码

智慧工地概述&#xff1a; 智慧工地管理平台是以物联网、移动互联网技术为基础&#xff0c;充分应用大数据、人工智能、移动通讯、云计算等信息技术&#xff0c;利用前端信息采通过人机交互、感知、决策、执行和反馈等&#xff0c;实现对工程项目內人员、车辆、安全、设备、材…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

深入解析 ReentrantLock:原理、公平锁与非公平锁的较量

ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...