当前位置: 首页 > 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;实现对工程项目內人员、车辆、安全、设备、材…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...