C++中集合的使用

在 C++ 中,集合通常指的是标准模板库(STL)中的 std::setstd::unordered_set。这两个都是用来存储不重复元素的容器,但在实现和使用方式上有一些区别。

1. std::set

  • 基于红黑树实现,元素按照严格的顺序(默认是升序)排列。
  • 插入、查找、删除操作的平均时间复杂度为 O(log n)。
  • 不支持直接修改元素的值,但可以通过删除再插入的方式来实现。
  • 用法示例:
#include <iostream>
#include <set>int main() {std::set<int> mySet;// 插入元素mySet.insert(3);mySet.insert(1);mySet.insert(4);mySet.insert(2);// 查找元素if (mySet.find(3) != mySet.end()) {std::cout << "3 存在于集合中" << std::endl;}// 删除元素mySet.erase(4);// 遍历集合for (int x : mySet) {std::cout << x << " ";}std::cout << std::endl;return 0;
}

2. std::unordered_set

  • 基于哈希表实现,元素无序存储。
  • 插入、查找、删除操作的平均时间复杂度为 O(1)。
  • 元素类型必须支持哈希函数,或者提供自定义的哈希函数。
  • 用法示例:
    #include <iostream>
    #include <unordered_set>int main() {std::unordered_set<int> mySet;// 插入元素mySet.insert(3);mySet.insert(1);mySet.insert(4);mySet.insert(2);// 查找元素if (mySet.find(3) != mySet.end()) {std::cout << "3 存在于集合中" << std::endl;}// 删除元素mySet.erase(4);// 遍历集合for (int x : mySet) {std::cout << x << " ";}std::cout << std::endl;return 0;
    }
    

    无论使用 std::set 还是 std::unordered_set,都需要包含 <set><unordered_set> 头文件,并且在编译时链接 STL 库。这些集合提供了强大的功能,可以方便地实现很多常见的数据结构和算法。

3.要判断一个元素是否在集合中

,你可以使用集合的 find() 函数。这个函数会返回一个迭代器,如果找到了元素,则返回指向该元素的迭代器;如果未找到,则返回集合的 end() 迭代器。下面是一个示例:

#include <iostream>
#include <set>int main() {std::set<int> mySet = {1, 2, 3, 4, 5};int element = 3;// 使用find()函数判断元素是否在集合中auto it = mySet.find(element);if (it != mySet.end()) {std::cout << element << " 存在于集合中" << std::endl;} else {std::cout << element << " 不在集合中" << std::endl;}return 0;
}

ps:

对于 std::set 中的 end(),它返回的是指向集合中最后一个元素之后的位置。通常在使用 find() 函数查找元素时,如果找不到目标元素,find() 函数会返回 end() 指向的位置,表示找不到目标元素。因此,我们通常会将 find() 函数的返回值与 end() 迭代器进行比较,以判断是否找到了目标元素。

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

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

相关文章

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

指令中常用的7种寻址方式z

指令中的寻址方式就是对指令中的地址字段进行解释&#xff0c;以获得操作数的方法或获得程序转移地址的方法。常用的寻址方式有&#xff1a; 立即寻址&#xff1a;操作数就包含在指令中。直接寻址&#xff1a;操作数存放在内存单元中&#xff0c;指令中直接给出操作数所在存储…

C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。

C#调用HttpClient.SendAsync报错&#xff1a;System.Net.Http.HttpRequestException: 发送请求时出错。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);问题出在SSL/TLS&#xff0c;Windows Server 2012不支持…

先进制造aps专题八 基于ai大模型的ai超级应用,ai生管

目前正在研发的面向消费者的ai超级应用有ai文员&#xff0c;ai教师&#xff0c;ai家教&#xff0c;ai护士&#xff0c;ai翻译 而ai生管无疑是面向制造业的ai超级应用 从商业角度来说&#xff0c;ai生管&#xff0c;必然是aps公司必然要研发的ai超级应用

Grafana 路径遍历所有路径 CVE-2021-43798漏洞预警

简介​ ​Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后&#xff0c;Grafana可以在网络浏览器里显示数据图表和警告。 漏洞危害等级 高危 CVE 编号​ CVE-2021-43798 FOFA查询 ​app"Grafana" ​zoomeyes查询 ​app:"gr…

Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”

文章目录 前言背景问题描述解决方案总结 前言 在使用 Vue 3 开发项目时&#xff0c;遇到“找不到模块 ‘/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题&#xff0c;确保…

2024-6-遥远的救世主

2024-6-遥远的救世主 2024-4-18 豆豆 fatux&#xff1a; 2021.5.26 看完电视剧《天道》之后购买本书&#xff0c;断断续续一直没有读完。 非常好奇&#xff0c;一个什么样的作者能写出如此奇书。老丁&#xff0c;一个智者&#xff0c;智者是多么孤独&#xff0c;因为找不到同…

信息安全等级保护测评: 登陆日志

文章目录 引言I 登录日志表结构设计II 日志处理2.1 封装日志入库2.2 收集登陆信息2.3 查询接口引言 等保测评是信息安全等级保护测评的简称,是对信息和信息载体按照重要性等级分级别进行检测、评估的过程。 背景:近期AIS监控平台(网页版)等保测评,发现没有登陆日志,现要…

从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池

文章目录 文章导图什么是CompletableFutureCompletableFuture用法总结API总结 为什么使用CompletableFuture场景总结 CompletableFuture默认线程池解析&#xff1a;ForkJoinPool or ThreadPerTaskExecutor&#xff1f;ForkJoinPool 线程池ThreadPerTaskExecutor线程池Completab…

Qt 界面上字体自适应控件大小 - 随控件缩放

Qt 界面上字体自适应控件大小 - 随控件缩放 引言一、设计思路二、进阶版大致思路三、参考链接 引言 Qt控件自适应字体大小可以用adjustSize()函数&#xff0c;但字体自适应控件大小并没有现成的函数可调. - 本文实现了按钮上的字体随按钮大小变化而变化 (如上图所示) - 其他控件…

Spring MVC+mybatis 项目入门:旅游网(三)用户注册——控制反转以及Hibernate Validator数据验证

个人博客&#xff1a;Spring MVCmybatis 项目入门:旅游网&#xff08;三&#xff09;用户注册 | iwtss blog 先看这个&#xff01; 这是18年的文章&#xff0c;回收站里恢复的&#xff0c;现阶段看基本是没有参考意义的&#xff0c;技术老旧脱离时代&#xff08;2024年辣铁铁&…

澳大利亚.德国-门户媒体投放通稿:需要注意什么地方

概述 在现代社会&#xff0c;新闻媒体的投放成为企业和组织宣传推广的重要手段之一。澳大利亚和德国作为全球重要的经济和科技中心&#xff0c;其新闻媒体也备受关注。本文将介绍澳大利亚和德国的一些主要新闻媒体&#xff0c;并讨论发表新闻稿时需要注意的地方。 澳大利亚媒…

streamlit 学习

表情网站 https://getemoji.com/ 官网&#xff1a; https://streamlit.io/ 文档 https://docs.streamlit.io/develop/api-reference/chat/st.chat_message 安装&#xff1a; pip install streamlit启动 以下的python 文件指写streamlit 程序的脚步。 1、先切换目录到Pyth…

VMware虚拟机-设置系统网络IP、快照、克隆

1.设置网络IP 1.点击右上角开关按钮-》有线 已连接-》有线设置 2.手动修改ip 3.重启或者把开关重新关闭开启 2.快照设置 快照介绍&#xff1a; 通过快照可快速保存虚拟机当前的状态&#xff0c;后续可以使用虚拟机还原到某个快照的状态。 1.添加快照(需要先关闭虚拟机) 2.在…

[JAVASE] 类和对象(六) -- 接口(续篇)

目录 一. Comparable接口 与 compareTo方法 1.1 Comparable接口 1.2 compareTo方法的重写 1.2.1 根据年龄进行比较 1.2.2 根据姓名进行比较 1.4 compareTo 方法 的使用 1.3 compareTo方法的缺点(重点) 二. Comparator接口 与 compare方法 2.1 Comparator接口 2.2 compare 方法…

蓝桥杯算法心得——李白打酒(加强版)

大家好&#xff0c;我是晴天学长&#xff0c;记忆化搜索&#xff0c;找到技巧非常重要&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 2) .算法思路 1.memo三维表示记录的结果 3&#xff09;.算法步骤 1…

slint esp32 tokio

源码&#xff1a;https://github.com/xiaguangbo/slint_esp32_tokio cpu 是 esp32c2&#xff0c;屏幕是 ili9341&#xff0c;触摸是 xpt2046&#xff0c;使用 spi 半双工 不使用DMA&#xff08;esp-rs还没支持&#xff09;&#xff0c;SPI 40M&#xff0c;240*320全屏刷新为1.5…

python文件IO之pickle 模块读写对象数据

可以向一个文件中写入字符串&#xff0c;读取后也是读取字符串形式&#xff0c;但是不能直接向文件中写入像列表这样的对象&#xff0c;需要 pickle 等模块才行。 pickle 模块介绍 pickle 模块使用强大且有效的算法来进行序列化和反序列化。 序列化是指将一个对象转换为能够存…

前端面试手册

前端面试手册 岗位职责&#xff1a; 1&#xff0e;熟悉公司业务&#xff0c;能独立高效高质地完成任务&#xff0c;负责功能的开发、测试、上线、维护&#xff1b; 2&#xff0e;负责推动、优化前端基础架构、组件抽象&#xff0c;提升开发效率&#xff1b; 3&#xff0e;关…

四. TensorRT模型部署优化-模型部署的基础知识

目录 前言0. 简介1. FLOPS2. TOPS3. HPC的排行&#xff0c;CPU/GPU比较4. FLOPs5. FLOPS是如何计算的6. CUDA Core vs Tensor Core总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们…