9.set容器的使用

文章目录

    • set容器
      • 1.构造和赋值
        • 代码工程
        • 运行结果
      • 2.大小和交换
        • 代码工程
        • 运行结果
      • 4.插入和删除
        • 代码工程
        • 运行结果
      • 5.查找和统计
        • 工程代码
        • 运行结果
      • 6.multset
        • 代码工程
        • 运行结果
      • 7.指定排序规则
        • 代码工程
        • 运行结果
      • 8.自定义数据类型排序
        • 代码工程
        • 运行结果

set容器

	所有元素都会在插入时,自动被排序。set/multset属于关联式容器,底层结构式用二叉树实现的。set容器不允许有重复的元素;multset容器允许有重复的元素。

1.构造和赋值

/*1.插入 - insert*/
/*2.拷贝构造*/
/*3.赋值 - operator= */
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>using namespace std;/*1.插入 - insert*/
/*2.拷贝构造*/
/*3.赋值 - operator= */
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>s;/*1.插入 - insert  插入数据只有insert方式*/s.insert(20);s.insert(30);s.insert(10);s.insert(40);/*无序插入,输出打印还是有序排列的*/printSet(s);/*2.拷贝构造*/set<int>s1(s);printSet(s1);/*3.赋值  operator= */set<int>s2;s2 = s1;printSet(s2);return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

2.大小和交换

/*1.判断大小 - size*/
/*2.判断是否为空 - empty*/
/*3.交换容器 - swap */
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>using namespace std;/*1.判断大小 - size*/
/*2.判断是否为空 - empty*/
/*3.交换容器 - swap */
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>s;s.insert(20);s.insert(30);s.insert(10);s.insert(40);printSet(s);if (0 != s.empty()){cout << "容器为空" << endl;return;}cout << "容器的大小:" << s.size() << endl;set<int>s1;s1.insert(200);s1.insert(300);s1.insert(100);s1.insert(400);cout << endl;cout << "交换两个容器的元素" << endl;cout << "交换前s容器元素:" << "\t";printSet(s);cout << "交换前s1容器元素:" << "\t";printSet(s1);s.swap(s1);cout << "交换后s容器元素:" << "\t";printSet(s);cout << "交换后s1容器元素:" << "\t";printSet(s1);return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

4.插入和删除

/*1.插入数据 - insert*/
/*2.删除数据 - erase*/
/*3.清空数据 - clear*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>using namespace std;/*1.插入数据 - insert*/
/*2.删除数据 - erase*/
/*3.清空数据 - clear*/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>s;/*1.插入数据 - insert*/s.insert(20);s.insert(30);s.insert(10);s.insert(40);printSet(s);/*2.删除数据 - erase*/s.erase(s.begin());printSet(s);/*删除 - 重载版本*/s.erase(40);printSet(s);/*3.清空 - clear*/s.clear();//erase(s.begin(), s.end());printSet(s);if (0 == s.empty()){cout << "容器不为空" << endl;}else{cout << "容器为空" << endl;}return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

5.查找和统计

/*1.查找数据 - find*/
/*2.统计个数 - count*/
工程代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>using namespace std;/*1.查找数据 - find*/
/*2.统计个数 - count*/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>s;s.insert(20);s.insert(30);s.insert(10);s.insert(40);printSet(s);set<int>::iterator pos = s.find(30);if (s.end() == pos){cout << "没找到元素" << endl;}else{cout << *pos << endl;/*set容器统计个数要么是0,要么是1*/cout << "统计元素是20的个数:" << s.count(20) << endl;}return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

6.multset

	multset可以插入重复的元素
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>using namespace std;void printMultset(const multiset<int>&ms)
{for (multiset<int>::const_iterator it = ms.begin(); it != ms.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{multiset<int>ms;/*可以插入重复的元素*/ms.insert(20);ms.insert(30);ms.insert(30);ms.insert(10);printMultset(ms);return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

7.指定排序规则

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>using namespace std;class MyCmp
{
public:/*仿函数后边加入,const*/bool operator()(int v1, int v2) const{return v1 > v2;}
};void printSet(set<int, MyCmp>& s)
{for (set<int, MyCmp>::iterator it = s.begin(); it != s.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{set<int, MyCmp>s;s.insert(20);s.insert(30);s.insert(10);s.insert(40);printSet(s);return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

8.自定义数据类型排序

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<set>using namespace std;class Person
{
public:Person(string name, int age){my_name = name;my_age = age;}string my_name;int my_age;
};class MyCmp
{
public:bool operator()(Person p1, Person p2) const{if (p1.my_age > p2.my_age){return true;}else{return false;}}
};void printSet(set<Person, MyCmp>&s)
{for (set<Person, MyCmp>::iterator it = s.begin(); it != s.end(); it++){cout << "姓名:" << it->my_name << "\t" << "年龄" << it->my_age << endl;}
}void test01()
{Person p1("曹操", 28);Person p2("刘备", 30);Person p3("赵云", 35);set<Person, MyCmp>s;s.insert(p1);s.insert(p2);s.insert(p3);printSet(s);return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

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

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

相关文章

理解Three.js的相机

大家都知道我们生活中的相机&#xff0c;可以留下美好瞬间。那Three.js的相机是什么呢&#xff1f;Three.js创建的场景是三维的&#xff0c;而我们使用的显示器显然是二维的&#xff0c;相机就是抽象的定义了三维空间到二维显示器的投影方式。Three.js常见的相机有两类&#xf…

Stable diffusion 加载扩展列表报错解决方法

项目场景&#xff1a; 在使用Stable diffusion webui时&#xff0c;使用扩展列表出现错误 问题描述 点击loadfrom后&#xff0c;出现加载扩展列表报错 原因分析&#xff1a; 下载的扩展的时候&#xff0c;都是github 的url&#xff0c;需要科学上网&#xff0c;如果不能科学…

C语言动态内存空间分配

1. 前言 在讲内存分配前&#xff0c;咱来聊一下为什么会有内存分配这个概念呢&#xff0c;大家都知道C语言当中是有着许多的数据类型&#xff0c;使用这些数据类型就会在内存上开辟其相对应的空间&#xff0c;那既然会开辟相应的空间&#xff0c;为什么还会有内存分配呢&#x…

如何利用FLUENT计算流体力学方法解决大气与环境领域流动问题

ANSYS FLUENT是目前全球领先的商用CFD 软件&#xff0c;市场占有率达70%左右&#xff0c;是工程师和研究者不可多得的有力工具。由于采用了多种求解方法和多重网格加速收敛技术&#xff0c;因而FLUENT能达到最佳的收敛速度和求解精度。灵活的非结构化网格和基于解的自适应网格技…

Pycharm安装request的时候出现警告“由于目标计算机积极拒绝,无法连接”,然后出现报错无法安装

Pycharm安装request的时候出现警告“由于目标计算机积极拒绝&#xff0c;无法连接”&#xff0c;然后出现报错无法安装 一、报错二、解决办法 一、报错 二、解决办法 1、点击WinR 2、输入 regedit、进入注册表 3、在搜索框处输入&#xff1a;HKEY_CURRENT_USER\Software\Mic…

HTML基础知识详解(上)(如何想知道html的全部基础知识点,那么只看这一篇就足够了!)

前言&#xff1a;在学习前端基础时&#xff0c;必不可少的就是三大件&#xff08;html、css、javascript &#xff09;&#xff0c;而HTML&#xff08;超文本标记语言——HyperText Markup Language&#xff09;是构成 Web 世界的一砖一瓦&#xff0c;它定义了网页内容的含义和…

57 npm run build 和 npm run serve 的差异

前言 npm run serve 和 npm run build 的差异 这里主要是从 vue-cli 的流程 来看一下 我们经常用到的这两个命令, 他到传递给 webpack 打包的时候, 的一个具体的差异, 大致是配置了那些东西? 经过了那些流程 ? vue-cli 的 vue-plugin 的加载 内置的 plugin 列表如下, 依次…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

keycloak - 鉴权VUE

目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(realms) b、创建客户端 c、创建用户、角色 2、vue代码 a、依赖 b、main.js 三、未解决的问题 目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(r…

51单片机入门:认识开发板

认识开发板 板载资源&#xff1a; 数码管模块 说明&#xff1a; 2个四位一体共阴数码管 详细&#xff1a; 2个四位一体&#xff1a;两个独立的四位数码管&#xff0c;每个四位数码管都是“一体”的设计&#xff0c;也就是说&#xff0c;每个数码管内部集成了四个独立的七段LE…

【学习】成为优秀的软件测试工程师需要学哪些知识

成为软件测试工程师&#xff0c;需要学习的内容非常的多&#xff0c;但是无非是这几大类&#xff0c;今天就和小编一起来看看这些知识&#xff0c;你是否都已经掌握。 01、测试环境的搭建 本部分主要是学习从操作系统开始&#xff0c;有关的计算机基础知识、软件和硬件知识、…

golang设计模式图解——模板方法模式

设计模式 GoF提出的设计模式有23个&#xff0c;包括&#xff1a; &#xff08;1&#xff09;创建型(Creational)模式&#xff1a;如何创建对象&#xff1b; &#xff08;2&#xff09;结构型(Structural )模式&#xff1a;如何实现类或对象的组合&#xff1b; &#xff08;3&a…

LeNet卷积神经网络

文章目录 简介conv2d网络层的结构 简介 它是最早发布的卷积神经网络之一 conv2d 这个卷积成的参数先进行介绍一下&#xff1a; self.conv1 nn.Conv2d(in_channels3, out_channels10, kernel_size3, stride1, padding1)先看一下in_channels 输入的通道数&#xff0c;out_cha…

初识MySQL(中篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 目录 1.SQL语言 1.1 SQL语言组成部分 2.MySQL数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 3.创建数据表 3.1 创建数据表方法1 …

scala实现通过Spark统计人均登录次数最终写入MySQL

谨以此博客作为记录 小编这里用的版本是&#xff1a; <hadoop.version>2.7.7</hadoop.version> <spark.version>2.4.5</spark.version> <scala.version>2.12.10</scala.version> 如果没用到Hadoop可以忽略 步骤 准备数据&#xff0c;知道…

Python网络爬虫(四):b站评论

首先来看一下采集的数据格式: 本文不对数据采集的过程做探讨,直接上代码。首先要在程序入口处bvids列表内替换成自己想要采集的视频bvid号,然后将self.cookies替换成自己的(需要字典格式),代码可以同时爬取多个视频的评论,且爬取的评论较为完整,亲测有效: im…

SRS 实时视频服务器搭建及使用

一、SRS 介绍 SRS是一个开源的&#xff08;MIT协议&#xff09;简单高效的实时视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用&#xff0c;提供流的接收和分发的能力&am…

【QT+QGIS跨平台编译】056:【PDAL+Qt跨平台编译】(pdalcpp错误处理)

点击查看专栏目录 文章目录 一、报错信息:二、原因分析三、解决思路四、原版FileUtils.cpp五、修改后的FileUtils.cpp一、报错信息: ① exists is unavaiable: introduced in macOS 10.15 ② create_directory is unavaiable: introduced in macOS 10.15 ③ create_director…

VSCode美化

今天有空收拾了一下VSCode&#xff0c;页面如下&#xff0c;个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多&#xff0c;有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网&#xff1a;Maple-Font 我只安装了下图两个字体&#xff0c;使…

基于Python近红外光谱分析与机器学、深度学习方法融合技术应用

郁磊副教授&#xff0c;主要从事MATLAB 编程、机器学习与数据挖掘、数据可视化和软件开发、人工智能近红外光谱分析、生物医学系统建模与仿真&#xff0c;具有丰富的实战应用经验&#xff0c;主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发…