C++标准模板库(STL)-set介绍

在C++中,set是一种容器,它包含了唯一元素的有序集合。set库提供了一系列的类模板,用于创建和操作集合。

set基本操作

  1. insert():此操作用于将元素插入到set中。调用insert()函数,并传入需要插入的元素即可。例如:s.insert(6);
  2. find():此操作用于在set中查找元素。调用find()函数,并传入需要查找的元素即可。如果元素存在于set中,该函数会返回一个指向该元素的迭代器;否则,返回end()。例如:auto it = s.find(3);
  3. erase():此操作用于从set中删除元素。调用erase()函数,并传入需要删除的元素即可。例如:s.erase(3);
  4. clear():此操作用于清空整个set。调用clear()函数即可。例如:s.clear();
  5. size():此操作用于获取当前set中的元素个数。调用size()函数即可。例如:int num = s.size();
  6. max_size():此操作用于获取set的最大容量。调用max_size()函数即可。例如:int max_num = s.max_size();
  7. count():此操作用于判断某个元素在set中出现的次数。调用count()函数,并传入需要判断的元素即可。例如:int count = s.count(6);

set特性

  1. 唯一性:set中的元素是唯一的,不允许重复。
  2. 有序性:set中的元素是有序的,按照元素的插入顺序进行排列。
  3. 可变性:set中的元素是可以改变的,可以添加、删除或修改元素。
  4. 无序性:set中的元素是无序的,不能通过下标或者位置来访问元素。
  5. 高效的查找操作:set提供了高效的查找操作,可以在O(1)的时间复杂度内完成查找操作。
  6. 动态大小:set的大小是动态的,可以动态地添加和删除元素。
  7. 支持集合运算:set支持并集、交集、差集等集合运算,方便进行集合操作。
  8. 不支持下标访问:set不支持下标访问操作,只能通过迭代器访问元素。
  9. 线程不安全:set不是线程安全的,如果在多线程环境下使用,需要进行同步处理。

应用举例

  1. 定义和初始化
#include <iostream>
#include <set>int main() {std::set<int> s1;  // 定义一个空的setstd::cout << "s1: ";for (int i : s1) {std::cout << i << " ";}std::cout << std::endl;std::set<int> s2 = {1, 2, 3, 4, 5};  // 定义并初始化一个setstd::cout << "s2: ";for (int i : s2) {std::cout << i << " ";}std::cout << std::endl;return 0;
}

输出:

s1: 
s2: 1 2 3 4 5 
  1. 插入元素
#include <iostream>
#include <set>int main() {std::set<int> s = {1, 2, 3, 4, 5};s.insert(6);  // 向set中插入元素6,并保持有序性std::cout << "s: ";for (int i : s) {std::cout << i << " ";}std::cout << std::endl;return 0;
}

输出:

s: 1 2 3 4 5 6
  1. 查找元素
#include <iostream>
#include <set>int main() {std::set<int> s = {1, 2, 3, 4, 5};auto it = s.find(3);  // 在set中查找元素3,并返回指向该元素的迭代器,如果元素不存在,返回end()。if (it != s.end()) {std::cout << "Found: " << *it << std::endl;  // 如果元素存在,输出该元素的值。此处应为Found: 3。注意,迭代器不能直接使用,需要使用*操作符取得其指向的值。也可以使用it->first或it->second来获取键或值。但这不是标准做法。在map中可以使用这种方式。在set中,键和值是同一个,所以使用*操作符。} else {std::cout << "Not Found" << std::endl;  // 如果元素不存在,输出Not Found。此处应为Not Found。注意,set不区分键和值,所以不能使用类似map的it->first或it->second的方式获取键或值。只能使用*操作符。但这不是标准做法。在map中可以使用这种方式。在set中,键和值是同一个,所以使用*操作符。在map中,键和值是不同的,所以可以使用first和second来获取键和值。

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

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

相关文章

车载毫米波雷达行业发展5——企业

5.1 博世 5.1.1 公司简介 博世集团创立于 1886 年&#xff0c;业务涵盖汽车与智能交通技术、工业技术、消费品、能源与建 筑技术四大领域&#xff0c;是德国最大的工业企业之一、全球最大的汽车零部件供应商、最早研究车载毫米波雷达的企业之一。博世在高级辅助驾驶和自动驾驶…

移动语义和完美转发

移动语义和完美转发 移动语义 移动语义是 C11 引入的一项特性&#xff0c;通过右值引用&#xff08;Rvalue Reference&#xff09;实现。它的目标是提高对于临时对象或即将销毁的对象的效率&#xff0c;避免不必要的深拷贝&#xff0c;而是在必要的时候将资源所有权从一个对象…

B Label, BL Label 指令

B Label, BL Label 跳转到标号Label 处&#xff0c;B跳转指令的跳转范围大小为[0,32MB], 可以往前跳&#xff0c;也可以往后条&#xff0c;无条件跳转指令B主要用在循环&#xff0c;分之结构的汇编程序中&#xff0c;使用示例如下。 CMP R2, #0 REQ label 若R2 0,则跳转到labe…

mfc140u.dll丢失的解决方法,以及mfc140u.dll解决方法的优缺点

在使用电脑过程中&#xff0c;有时会遇到一些与动态链接库文件&#xff08;DLL&#xff09;相关的错误。其中&#xff0c;mfc140u.dll丢失的错误是较为常见的一种。当这个关键的mfc140u.dll文件丢失或损坏时&#xff0c;可能会导致某些应用程序无法正常运行。在本文中&#xff…

linux清理僵尸进程

当你top看到这个&#xff0c;或者按M后看到内存吃的很多&#xff0c;那你看下有没有&#x1f9df; 二选一查看是什么进程 ps aux | egrep "Z|defunct" ps -aux | awk {if($8"Z"){print $2,$11}}没用直接杀杀杀 kill -9 查到的PID号可中断下载文件 wget…

AlmaLinux download

前言 一个开源的、社区拥有和管理的、永远免费的企业级Linux发行版&#xff0c;专注于长期稳定性&#xff0c;提供一个健壮的生产级平台。AlmaLinux操作系统是1:1二进制兼容RHEL和pre-Stream CentOS。 AlmaLinux download VersionAlmaLinux downloadAlmaLinux backup阿里云…

webshell免杀之传参方式

1.Cookie 由于Cookie基本上是每个web应用都需要使用到的&#xff0c;php应用在默认情况下&#xff0c;在Cookies请求头中会存在一个PHPSESSIDxxxx这样的cookie&#xff0c;其实这个就可以成为我们的传参位置 使用burp抓包将内容改成base64加密后的命令 可以看到已经执行成功了…

BeautifulReport测试报告框架

BeautifulReport测试报告框架 ##执行文件excute_case.py import unittest import os, datetime from BeautifulReport import BeautifulReportroot_dir os.path.dirname(os.path.abspath(__file__)).replace(\\, /) print(root_dir路径,root_dir) #test_dir root_dir /test…

c语言从入门到实战——回调函数与qsort的讲解和模拟实现

回调函数与qsort的讲解和模拟实现 前言1. 回调函数是什么&#xff1f;2. qsort2.1 使用qsort函数排序整型数据2.2 使用qsort排序结构数据 3. qsort函数的模拟实现 前言 回调函数是一个函数&#xff0c;它作为参数传递给另一个函数&#xff0c;并且能够在该函数内部被调用。在C…

Nginx 可视化管理平台:nginx-proxy-manager

本心、输入输出、结果 文章目录 Nginx 可视化管理平台:nginx-proxy-manager前言nginx-proxy-managernginx-proxy-manager 特性快速开始使用 Docker 网络开启 Docker 健康检查相关可视化页面相关链接弘扬爱国精神Nginx 可视化管理平台:nginx-proxy-manager 编辑:简简单单 Onl…

Vue 路由器传参和取值 路径参数

Query参数取值 http://www.csdn/index?id10&age123 取值 this.$route.query.id//获取id值 this.$route.query.age//获取age值传值 <router-link :to"{path:/index,query:{ id:10,age:123 }}"></router-link>携带参数跳转到指定路由 this.$ro…

深入解析SSD Wear Leveling磨损均衡技术:如何让你的硬盘更长寿?

SSD的存储介质是什么&#xff0c;它就是NAND闪存。那你知道NAND闪存是怎么工作的吗&#xff1f;其实&#xff0c;它就是由很多个晶体管组成的。这些晶体管里面存储着电荷&#xff0c;代表着我们的二进制数据&#xff0c;要么是“0”&#xff0c;要么是“1”。NAND闪存原理上是一…

【DevOps】Git 图文详解(五):远程仓库

Git 图文详解&#xff08;五&#xff09;&#xff1a;远程仓库 1.远程用户登录1.1 &#x1f511; 远程用户登录&#xff1a;HTTS1.2 &#x1f511; 远程用户登录&#xff1a;SSH 2.远程仓库指令 &#x1f525;3.推送 push / 拉取 pull4.fetch 与 pull 有什么不同 &#xff1f; …

【汇编】“转移”综述、操作符offset、jmp指令

文章目录 前言一、转移综述1.1 :背景&#xff1a;1.2 转移指令1.3 转移指令的分类按转移行为根据指令对IP修改的范围不同 二、操作符offset2.1 offset操作符是干什么的&#xff1f;标号是什么&#xff1f; 2.2 nop是什么&#xff1f; 三、jmp指令3.1 jmp指令的功能3.2 jmp指令&…

【目标测距】雷达投影测距

文章目录 前言一、读取点云二、点云投影图片三、读取检测信息四、点云投影测距五、学习交流 前言 雷达点云投影相机。图片目标检测&#xff0c;通过检测框约束等等对目标赋予距离。计算消耗较大&#xff0c;适合离线验证操作。在线操作可以只投影雷达检测框。 一、读取点云 py…

关于node安装和nvm安装的问题

node 1.已经自定义路径安装了node&#xff0c;但是在cmd输入node -v显示不是内部命令 路径问题&#xff1a;确保 Node.js 已经被添加到了系统的环境变量 PATH 中。PATH 环境变量包含了操作系统用来查找命令的位置。你可以通过以下步骤检查 Node.js 是否已被添加到 PATH&#x…

校园报修抢修小程序系统开发 物业小区报修预约上门维修工单系统

开发的功能模块有&#xff1a; 1.报修工单提交&#xff1a;学生、教职员工等可以使用小程序提交报修请求。这通常包括选择报修的问题类型&#xff08;如水漏、电器故障、照明问题等&#xff09;&#xff0c;地点&#xff0c;报修联系人&#xff0c;联系电话等&#xff0c;并提供…

【5k字长文 | Vue学习笔记】#1 认识Vue对象和基础语法

Vue是一个非常流行的渐进式JavaScript框架&#xff0c;渐进式指的是自底向上&#xff0c;从小组件逐渐向上构成整个项目&#xff0c;渐进式还可以理解为&#xff1a;用什么就拿什么&#xff0c;每个组件只做自己的事&#xff0c;尽可能解耦合。 本节我们将学习简单的Vue实例&a…

Thales安全解决方案:国家网络安全的关键

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。在这个背景下&#xff0c;Thales安全解决方案正成为提高国家网络安全的关键。本文将探讨Thales安全解决方案如何为国家网络安全保驾护航。 一、Thales安全解决方案概述 Thales安全解决方案是一种全方位的网络安全防护…

upload-labs关卡11(双写后缀名绕过)通关思路

文章目录 前言一、回顾前几关知识点二、靶场第十一关通关思路1、看源代码2、bp抓包双写后缀名绕过3、检查文件是否成功上传 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的…