c++语言基础17-判断集合成员

题目描述

请你编写一个程序,判断给定的整数 n 是否存在于给定的集合中。

输入描述

有多组测试数据,第一行有一个整数 k,代表有 k 组测试数据。

每组数据第一行首先是一个正整数 m,表示集合中元素的数量(1 <= m <= 1000)。

接下来一行包含 m 个整数,表示集合中的元素。

最后一行包含一个整数 n,表示需要进行判断的目标整数。

输出描述

包含多组输出,每组输出占一行。

如果集合中存在 m,输出“YES”,否则输出“NO”。

输入示例
2
5
1 2 3 4 5
3
6
1 2 3 4 5 6
7
输出示例
YES
NO

题目分析

哈希表常使用的数据结构有数组、set集合、map映射

set

和数学中的集合一样,C++中的集合set用于允许存储一组不重复的元素, 并且元素的值按照有序排列, set基于红黑树实现,支持高效的关键字查询操作, 可以用来检查一个给定关键字是否在set中。

无序集合unordered-set类似于集合(Set),但不会按照元素的值进行排序,而是由哈希函数的结果决定的。

multiset 则是一个用于存储一组元素,允许元素重复,并按照元素的值进行有序排列的集合。

在这里插入图片描述

Set的使用

使用集合set需要先引入头文件

// 引入<unordered_set>头文件
#include <unordered_set>
// 引入set头文件
#include <set>

创建一个集合的写法如下

// 创建一个存储整数的无序集合
unordered_set<int> mySet;
// 创建一个存储整数的set
set<int> mySet;
// 创建一个存储整数的 multiset
multiset<int> myMultiSet; 

想要向集合中插入元素需要使用insert()方法

 // 向集合中插入元素
mySet.insert(1);
mySet.insert(2);
mySet.insert(3);

想要往集合中删除元素需要使用erase方法

mySet.erase(1);

创建一个集合,将输入的数据使用insert()方法插入到集合中

判断某个元素是否在集合中,需要使用到find()方法,如果找到了,返回指向元素的迭代器,如果不存在,则最终指向end()的迭代器,通过判断find()的返回结果可以判定元素是否在集合中。

完整代码

#include <iostream>
#include <unordered_set>int main () {int k;std::cin >> k;while (k--) {int m;std::cin >> m;std::unordered_set<int> unset;int val;while (m--) {std::cin >> val;unset.insert(val);}int n;std::cin >> n;if(unset.find(n) != unset.end()) {std::cout << "YES" << std::endl;}else {std::cout << "NO" << std::endl;}}
}

迭代器

迭代器iterator提供了一种类似指针的接口,可以用来遍历访问容器(比如数组、集合)中的元素,并执行各种操作。

可以理解为,迭代器和下标运算符的作用一样,用来访问容器中的元素,并且迭代器可以从一个元素移动到另外一个元素。

迭代器都拥有名为begin()和end()的成员,表示指向第一个元素和最后一个元素的下一个元素的迭代器(尾后迭代器),如果容器为空,则begin和end返回的是同一个迭代器。

可以使用比较运算符来判断两个迭代器是否相等,如果迭代器想要从一个元素移动到另外一个元素,可以使用递增++运算符和递减–运算符,表示向前(后)移动一个位置。

通过解引用*可以获取迭代器所指的对象,下面的示例表示了vector的遍历。

#include <iostream>
#include <vector>
using namespace std; int main() {vector<int> myVector = {1, 2, 3, 4, 5};// 使用迭代器遍历容器// vector<int>::iterator it  用于创建一个能读取<vector>int 元素的迭代器it,最初指向begin()// ++it表示迭代器的移动for (vector<int>::iterator it = myVector.begin(); it != myVector.end(); ++it) {cout << *it << " "; // 通过解引用获取迭代器所指的对象}cout << endl; return 0;
}
r.begin(); it != myVector.end(); ++it) {cout << *it << " "; // 通过解引用获取迭代器所指的对象}cout << endl; return 0;
}

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

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

相关文章

Java学习,一文掌握Java之SpringBoot框架学习文集(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【Qt第三方库】QXlsx库——对 Excel 文件进行相关操作

0 前言 关键词&#xff1a;Qt&#xff1b;Excel&#xff1b;QXlsx&#xff1b;QInt 简介&#xff1a; QXlsx 是第三方开源的库&#xff0c;能够对 Excel 文件进行相关操作&#xff08;读写等&#xff09; 地址&#xff1a; QXlsx官网 QXlsx的Github主页 1 快速上手 对于第一次…

机器学习期末复习

机器学习 选择题名词解释&#xff1a;简答题计算题一、线性回归二、决策树三、贝叶斯 选择题 机器学习利用经验 &#xff0c;须对以下&#xff08;&#xff09;进行分析 A 天气 B 数据 C 生活 D 语言 归纳偏好值指机器学习算法在学习的过程中&#xff0c;对以下&#xff08;&a…

【第一期】操作系统期末大揭秘:知识回顾与重点整理

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 操作系统概述1.1 操作系统定义1.2 操作系统的作用1.3 操作系统的功能1.4 操作…

软考网络工程师教程第五版(2018最新版)

软考网络工程师教程第五版(2018最新版) 内容简介 本书是全国计算机技术与软件专业技术资格(水平)考试指定用书。作者在前4版的基础上,根据网络工程师新版大纲的要求,针对考试的重点内容做了较大篇幅的修订,书中主要内容包括数据通信、广域通信网、局域网、城域网、因特网…

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…

C++面向对象高级编程(侯捷)笔记2

侯捷C面向对象高级编程 本文是学习笔记&#xff0c;仅供个人学习使用&#xff0c;如有侵权&#xff0c;请联系删除。 如果你对C面向对象的组合、继承和委托不了解&#xff0c;对什么是拷贝构造、什么是拷贝赋值和析构不清楚&#xff0c;对类设计中的Adapter、pImpl、Template…

书生-浦路大模型全链路开源体系

2023年&#xff0c;大模型成为热门关键词 论文链接 大模型已经成为发展通用人工智能的重要途经 模型评测过程&#xff1a;从模型到应用 全链条开源开发体系 | 数据&#xff1a; 多模态融合 万卷包含文本、图像和视频等多模态数据&#xff0c;涵盖科技、文学、媒体、教育和法…

服务网格 Service Mesh

什么是服务网格&#xff1f; 服务网格是一个软件层&#xff0c;用于处理应用程序中服务之间的所有通信。该层由容器化微服务组成。随着应用程序的扩展和微服务数量的增加&#xff0c;监控服务的性能变得越来越困难。为了管理服务之间的连接&#xff0c;服务网格提供了监控、记…

奈奎斯特定理

奈奎斯特定理是通信领域中重要的理论基础之一&#xff0c;它对于数字通信系统中的信号采样和重构具有至关重要的作用。在数字信号处理和通信技术中&#xff0c;奈奎斯特定理的应用不仅具有理论意义&#xff0c;还对通信系统的设计、优化和性能提升起着重要的指导作用。本文将以…

苹果cmsV10暗黑大气MT主题模板源码-只有PC版本

苹果cms MT主题是一款多功能苹果cmsV10暗黑大气主题 初次使用说明&#xff1a; 网站模板选择mt 模板目录填写html 后台地址&#xff1a;MT主题,mt/mtset 先应用主题打开前台&#xff0c;再点击后台。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725…

人工智能技术在教育行业有哪些应用?

人工智能技术在教育行业有以下几个主要应用&#xff1a; 1. 个性化学习&#xff1a;人工智能可以根据学生的学习情况和特点&#xff0c;提供个性化的学习内容和教学方法。通过分析学生的学习数据和行为模式&#xff0c;AI 可以给予针对性的建议和反馈&#xff0c;帮助学生更好地…