卡码网 16 set集合

发布时间:2024年01月16日

判断集合成员

前言

之前我们讲到,哈希表的主要作用是判断给定的整数是否存在于给定的数据中, 哈希表常使用的数据结构有数组、set集合map映射, 上节课我们学习了数组作为哈希表,这节课我们来学习set集合, 具体包括下列内容

  • set、``unordered_set,?multiset `的概念和特点
  • set、``unordered_set,?multiset `的基本操作,比如创建、插入、删除、查找
  • 迭代器iterator

Set

关于unordered_set,multiset?的区别,,可以移步至代码随想录官方网站查看

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

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

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

集合底层实现是否有序数值是否可以重复
std::set红黑树有序
std::multiset红黑树有序
std::unordered_set哈希表无序

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);

find()?方法用于查找特定元素是否存在于集合中,如果?find()?方法找到了要查找的元素,它会返回指向该元素的迭代器,如果未找到要查找的元素,它会返回一个指向集合的?end()?的迭代器,表示未找到。通过比较find()方法返回的迭代器是否等于?end(),可以确定集合中是否有查找的元素。

// 判断元素是否在集合中, 只要不等于end(), 说明元素在集合中
if (mySet.find(i) != mySet.end()) {
}

?

判断集合成员

时间限制:2.000S??空间限制:128MB

题目描述

请你编写一个程序,判断给定的整数 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
?c++代码实现:
#include<iostream>
using namespace std;
#include<vector>
#include<unordered_set>
#include<set>
int main(){
    
   int k,n,val,m;
   cin>>k;
   while(k--){
       cin>>n;
       unordered_set<int> uset;
       while(n--){
           cin>>val;
           uset.insert(val);
       }
       cin>>m;
       if(uset.find(m)!=uset.end())
       cout<<"YES"<<endl;
       else
       cout<<"NO"<<endl;
       
       
       
       
   }
    
    
}

文章来源:https://blog.csdn.net/m0_59001573/article/details/135613605
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。