【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命令的上一步加入以下…...
智慧工地平台工地人员管理系统 可视化大数据智能云平台源码
智慧工地概述: 智慧工地管理平台是以物联网、移动互联网技术为基础,充分应用大数据、人工智能、移动通讯、云计算等信息技术,利用前端信息采通过人机交互、感知、决策、执行和反馈等,实现对工程项目內人员、车辆、安全、设备、材…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
