【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
一:场景:新搭建一台服务器,需要拉取公司私有镜像仓库。 docker拉取私有仓库报如下错误: Error response from daemon: Head "" no basic auth credentials 二:解决方式 docker私有仓库需要登录授权,因此…...
Redis消息传递:发布订阅模式详解
目录 1.Redis发布订阅简介 2.发布/订阅使用 2.1 基于频道(Channel)的发布/订阅 2.2 基于模式(pattern)的发布/订阅 3.深入理解Redis的订阅发布机制 3.1 基于频道(Channel)的发布/订阅如何实现的? 3.2 基于模式(Pattern)的发布/订阅如何实现的? 3.3 Sp…...
最强自动化测试框架Playwright(36)- 句柄
剧作家可以为页面 DOM 元素或页面内的任何其他对象创建句柄。这些句柄存在于 Playwright 进程中,而实际对象位于浏览器中。有两种类型的句柄: JSHandle 引用页面中的任何 JavaScript 对象ElementHandle 引用页面中的 DOM 元素,它具有额外的方…...
推荐一个绘图平台(可替代Visio)
不废话,简易记网址: draw.io 网站会重定向到:https://app.diagrams.net/...
【探索Linux】—— 强大的命令行工具 P.6(调试器-gdb、项目自动化构建工具-make/Makefile)
阅读导航 前言一、什么是调试器二、详解 GDB - 调试器1.使用前提2.经常使用的命令3.使用小技巧 三、项目自动化构建工具 - make/Makefile1. make命令⭕语法⭕常用选项⭕常用操作⭕make命令的工作原理⭕make命令的优势: 2.Makefile文件⭕Makefile的基本结构⭕Makefil…...
echarts-convert.js使用
echarts-convert.js demo 点击下载 1、本地安装phantom.js插件 window版本下载 2、更改文件路径 (D:\phantomjs-2.1.1-windows\bin)改为本地项目文件路径 3、打开cmd命令行,并格式化语言 运行以下命令 将命令行语言改为中文简体 chcp…...
数据结构之队列详解(包含例题)
一、队列的概念 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操…...
Prometheus的搭建与使用
一、安装Prometheus 官网下载地址:Download | Prometheus 解压:tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名: mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录: cd /home/prometheus查看配置文件&am…...
实战指南,SpringBoot + Mybatis 如何对接多数据源
系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难,MyBatis动态Sql标签解析 从零开始,手把手教你搭建Spring Boot后台工程并说明 Spring框架与SpringBoot的关联与区别 Spring监听器…...
论文阅读——Imperceptible Adversarial Attack via Invertible Neural Networks
Imperceptible Adversarial Attack via Invertible Neural Networks 作者:Zihan Chen, Ziyue Wang, Junjie Huang*, Wentao Zhao, Xiao Liu, Dejian Guan 解决的问题:虽然视觉不可感知性是对抗性示例的理想特性,但传统的对抗性攻击仍然会产…...
List和ObservableCollection和ListBinding在MVVM模式下的对比
List和ObservableCollection和ListBinding在MVVM模式下的对比 List 当对List进行增删操作后,并不会对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",该数据库存储在 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创建虚拟环境
创建虚拟环境是在计算机上设置一个独立的空间,用于安装和运行特定版本的软件和依赖项,以避免与系统其他部分的冲突。 创建虚拟环境: conda create --name myenv python3.8 这将创建一个名为myenv的虚拟环境,并安装Python 3.8版本。…...
Golang服务的请求调度
文章目录 1. 写在前面2. SheddingHandler的实现原理3. 相关方案的对比4. 小结 1. 写在前面 最近在看相关的Go服务的请求调度的时候,发现在gin中默认提供的中间件中,不含有请求调度相关的逻辑中间件,去github查看了一些服务框架,发…...
Jenkins的流水线启动jar后未执行问题处理
现象 在流水线里配置了启动脚本例如,nohup java -jar xxx.jar >nohup.out 2>&1 & 但是在服务器发现服务并未启动,且nohup日志里没输出日志,这样的原因是jenkins在执行完脚本后,就退出了这个进程。 在启动脚本执行jar命令的上一步加入以下…...
智慧工地平台工地人员管理系统 可视化大数据智能云平台源码
智慧工地概述: 智慧工地管理平台是以物联网、移动互联网技术为基础,充分应用大数据、人工智能、移动通讯、云计算等信息技术,利用前端信息采通过人机交互、感知、决策、执行和反馈等,实现对工程项目內人员、车辆、安全、设备、材…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
