C++学习 --set

目录

1, 什么是set

2, 创建set

2-1, 标准数据类型

2-2, 自定义数据类型

2-3, 其他创建方式

3, 操作set

3-1, 赋值

3-2, 添加元素(insert)

 3-2-1, 添加元素(insert)

3-2-2-1, 标准数据类型

3-2-2-2, 自定义数据类型

3-3, 查询

3-4, 查找(find)

3-4-1, 标准数据类型

3-4-2, 自定义数据类型

3-5, 获取长度(size)

3-6, 统计元素数量(count)

3-7, 交换(swap)

3-7, 删除元素(erase)

3-8, 清空元素(clear)

3-9, 判断是否为空(empty)

4, multiset


1, 什么是set

C++中的一种容器数据类型, 也叫集合容器, 会对插入的数据进行自动排序

分为set和multiset, 前者不允许重复值, 后置允许

2, 创建set

通过set<数据类型> 对象名, 创建set, 数据类型可以是标准数据类型, 也可以是自定义类型

2-1, 标准数据类型

//指定容器中元素数据类型为string
set<string> s1;

2-2, 自定义数据类型

class Myclass
{
public:Myclass() {};Myclass(string name, int age) :m_name(name), m_age(age) {};string m_name;int m_age;
};Myclass m("aaa", 1);
//容器中元素的类型为Myclass
set<Myclass> s1;

2-3, 其他创建方式

Myclass m1("aaa", 1);
set<Myclass> s1;
//拷贝构造方式创建
set<Myclass> s2(s1);
//通过迭代器指定区间方式创建
set<Myclass> s3(s2.begin(), s2.end());

3, 操作set

3-1, 赋值

通过set<数据类型> 对象名2 = 对象名1, 进行赋值

set<Myclass> s1;
set<Myclass> s2 = s1;

3-2, 添加元素(insert)

 3-2-1, 添加元素(insert)

通过对象名.insert(值), 可向set中插入元素

3-2-2-1, 标准数据类型
set<string> s1;
//向set容器中插入字符串对象aaa
s1.insert("aaa");
3-2-2-2, 自定义数据类型
//仿函数,定义排序规则
class MyCompare
{
public:bool operator()(const Myclass m1, Myclass m2) const{return m1.m_name > m2.m_name;}
};Myclass m1("aaa", 1);
//插入自定义类型时,需要指定仿函数
set<Myclass, MyCompare> s1;
//向set容器中插入m1
s1.insert(m1);
//通过迭代器指定位置插入
s1.insert(s1.begin(), m2);

3-3, 查询

通过for循环, 可遍历set中的元素

class Myclass
{
public:Myclass() {};Myclass(string name, int age) :m_name(name), m_age(age) {};string m_name;int m_age;
};class MyCompare
{
public:bool operator()(const Myclass m1, Myclass m2) const{return m1.m_name > m2.m_name;}
};int main()
{Myclass m1("aaa", 1);Myclass m2("bbb", 1);set<Myclass, MyCompare> s1;s1.insert(m1);s1.insert(m2);for (set<Myclass>::iterator it = s1.begin(); it != s1.end(); it++){cout << "姓名:" << it->m_name << " 年龄:" << it->m_age << endl;}system("pause");return 0;
}

3-4, 查找(find)

通过对象名.find(元素), 获取s1中的元素, 找到返回对应的迭代器,未找到返回s1.end()

3-4-1, 标准数据类型

set<string> s1;
s1.insert("aaa");
//通过s1.find(m1)查找s1中的m1元素, 找到返回对应的迭代器,未找到返回s1.end()
set<string>::iterator ret = s1.find("aaa1");if (ret != s1.end())
{cout << "存在" << endl;
}
else
{cout << "不存在" << endl;
}

3-4-2, 自定义数据类型

//通过s1.find(m1)查找s1中的m1元素, 找到返回对应的迭代器,未找到返回s1.end()
set<Myclass, MyCompare>::iterator ret = s1.find(m1);if (ret != s1.end())
{cout << "存在m1" << endl;
}
else
{cout << "不存在m1" << endl;
}

3-5, 获取长度(size)

通过对象名.size(), 获取set的元素个数

cout << s1.size() << endl;

3-6, 统计元素数量(count)

通过对象名.count(对象), 获取set的元素个数

cout << s1.count(m1) << endl;

3-7, 交换(swap)

通过对象名1.swap(对象名2) 交换两个set的元素, 两个set的数据类型需要一致

s1.swap(s2);

3-7, 删除元素(erase)

通过对象名.erase(迭代器位置), 删除元素

//指定迭代器位置删除元素
set<Myclass, MyCompare>::iterator it = s1.begin();
it++;
it++;
s1.erase(it);

3-8, 清空元素(clear)

通过对象名.clear(), 清空set元素

s1.clear();
//指定迭代器区间清空元素
s1.erase(s1.begin(), s1.end());

3-9, 判断是否为空(empty)

通过对象名.empty(), 判读set容器中元素是否为空, 为空返回1, 不为空返回0

cout << s1.empty() << endl;

4, multiset

multiset可插入重复的元素

int main()
{multiset<string> s1;s1.insert("m1");s1.insert("m1");s1.insert("m1");for (multiset<string>::iterator it = s1.begin(); it != s1.end(); it++){cout << *it << endl;}system("pause");return 0;
}

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

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

相关文章

MySQL的乐观锁和悲观锁

1、乐观锁&#xff1a; 乐观锁在操作数据的时候&#xff0c;是保持一种乐观的状态&#xff0c;认为别的线程是不会同时修改数据的&#xff0c;所以是不会上锁的&#xff0c;但是在更新的时候&#xff0c;会判断一下在这个期间内是否有别的线程修改过数据。 主要的流程&#x…

规划类3d全景线上云展馆帮助企业轻松拓展海外市场

科技3D线上云展馆作为一种基于VR虚拟现实和互联网技术的新一代展览平台。可以在线上虚拟空间中模拟真实的展馆&#xff0c;让观众无需亲自到场&#xff0c;即可获得沉浸式的参观体验。通过这个展馆&#xff0c;您可以充分、全面、立体展示您的产品、服务以及各种创意作品&#…

python运算符重载之成员关系和属性运算

1 python运算符重载之成员关系和属性运算 1.1 重载成员关系运算符 1.1.1 contains,iter,getitem python使用成员关系运算符in时&#xff0c; 按优先级调用方法&#xff1a;contains>iter>getitem&#xff1b; class MyIters:def __init__(self,value):self.datavalu…

2023年【安全生产监管人员】考试题及安全生产监管人员找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产监管人员考试题参考答案及安全生产监管人员考试试题解析是安全生产模拟考试一点通题库老师及安全生产监管人员操作证已考过的学员汇总&#xff0c;相对有效帮助安全生产监管人员找解析学员顺利通过考试。 1、…

【树莓派】Camera Module 使用

工具 RPI4RPI Camera Module 2 硬件安装 直接插到板子的相机带子插口上即可 使用前提 libcamera-hello运行这个命令能够成功&#xff0c;否则需要装相应的包 在 RPI4 上测试 libcamera-jpeg -o 00001.jpg -t 2000 --width 640 --height 480t 表示程序运行&#xff08;预…

SA8255 Q+A android 登录QNX

需要工具busybox 130|gen4_gvm:/ # cd /data/ gen4_gvm:/data # ./busybox telnet 192.168.1.1Entering character mode Escape character is ^].QNX Neutrino (localhost) (ttyp0)login: root No home directory. Logging in with home "/". # 用户名&#xff1a…

数据结构-栈的实现

1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&…

Matlab群体智能优化算法之海象优化算法(WO)

文章目录 一、灵感来源二、算法的初始化三、GTO的数学模型Phase1&#xff1a;危险信号和安全信号Phase2&#xff1a;迁移&#xff08;探索&#xff09;Phase3&#xff1a;繁殖&#xff08;开发&#xff09; 四、流程图五、伪代码六、算法复杂度七、WO搜索示意图八、实验分析和结…

FreeRTOS列表和列表项

FreeRTOS内核调度使用了大量的列表&#xff08;list&#xff09;和列表项&#xff08;listitem&#xff09;数据结构。它的源码中涉及到很多列表的操作&#xff0c;对于FreeRTOS来说&#xff0c;列表就是它最基础的一部分&#xff0c;列表被用作FreeRTOS调度器使用&#xff0c;…

力扣.面试题 04.06. 后继者(java 树的中序遍历)

Problem: 面试题 04.06. 后继者 文章目录 题目描述思路解题方法复杂度Code 题目描述 设计一个算法&#xff0c;找出二叉搜索树中指定节点的“下一个”节点&#xff08;也即中序后继&#xff09;。 如果指定节点没有对应的“下一个”节点&#xff0c;则返回null。 思路 由于题…

lombok @Slf4j注解啥作用

Logger logger Logger.getLogger(Test.class); logger.debug("这是一个调试信息"); logger.info("这是一个info信息");log4j 使用分两步 第一步&#xff1a;private final Logger logger LoggerFactory.getLogger(当前类名.class); 第二步&#xff1a;记…

Python开发运维:Celery连接Redis

目录 一、理论 1.Celery 二、实验 1.Windows11安装Redis 2.Python3.8环境中配置Celery 三、问题 1.Celery命令报错 2.执行Celery命令报错 3.Win11启动Celery报ValueErro错误 一、理论 1.Celery (1) 概念 Celery是一个基于python开发的分布式系统&#xff0c;它是简单…

Linux 命令: cut 和 tr

1. 写在前面 本文主要介绍&#xff1a;Linux "cut "和 “tr” 命令行实用程序概述&#xff1b; 公众号&#xff1a; 滑翔的纸飞机 2. Linux 命令&#xff1a; cut “cut” 命令是一种命令行工具&#xff0c;允许我们剪切指定文件或管道数据的部分内容&#xff0c;并…

JSP内置对象

一、request对象 1、访问请求参数 2、在作用域中管理属性 3、获取Cookie 4、解决中文乱码 5、获取客户端信息 6、显示国际化信息 是一个javax.servlet.http.HttpServletRequest对象 request封装了用户浏览器提交的信息&#xff0c;因此可以调用相应的方法可以获取这些封…

优先经验回放(prioritized experience replay)

prioritized experience replay 思路 优先经验回放出自ICLR 2016的论文《prioritized experience replay》。 prioritized experience replay的作者们认为&#xff0c;按照一定的优先级来对经验回放池中的样本采样&#xff0c;相比于随机均匀的从经验回放池中采样的效率更高&…

UML建模图文详解教程——类图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 类图概述 类图用来描述系统内各种实体的类型以及不同…

Unsupervised MVS论文笔记

Unsupervised MVS论文笔记 摘要1 引言2 相关工作3 实现方法 Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and Martial Hebert. Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and …

JAVA小游戏拼图

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import …

10、信息打点——APP小程序篇抓包封包XP框架反编译资产提取

APP信息搜集思路 外在——抓包封包——资产安全测试 抓包&#xff08;Fiddle&茶杯&burp&#xff09;封包&#xff08;封包监听工具&#xff09;&#xff0c;提取资源信息 资产收集——资源提取——ICO、MAD、hash——FOFA等网络测绘进行资产搜集 外在——功能逻辑 内在…

国际版Amazon Lightsail的功能解析

Amazon Lightsail是一项易于使用的云服务,可为您提供部署应用程序或网站所需的一切,从而实现经济高效且易于理解的月度计划。它是部署简单的工作负载、网站或开始使用亚马逊云科技的理想选择。 作为 AWS 免费套餐的一部分&#xff0c;可以免费开始使用 Amazon Lightsail。注册…