题目描述与分析
题目描述:
请你编写一个程序,判断给定的整数 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
和数学中的集合一样,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;
添加元素
mySet.insert(10);
mySet