STL中set容器的简单使用笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: **头文件**#include<set>(使用万能头文件include<bits/stdc++.h>的除外)。简单的特点: 1.在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序(默认从小到大) 2.set中数元素的值不能直接被改变 3.当对容器中的元素进行插入或者删除时,操作之前的所有迭代器在操作之后依然有效。 4.set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。定义一个容器;————————————————版权声明:本文为CSDN博主「笑霸final」的原创

**头文件**#include<set>(使用万能头文件include<bits/stdc++.h>的除外)。


简单的特点:


      1.在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序(默认从小到大)


      2.set中数元素的值不能直接被改变


       3.当对容器中的元素进行插入或者删除时,操作之前的所有迭代器在操作之后依然有效。


       4.set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。


定义一个容器;


1:using namespace std;


2:直接set<成员类型>成员名


例如:定义一个整型的set容器叫做s,直接set<int> s就行了。


set中常用的方法  :


erase(it)                 删除迭代器指针it处元素


       s.erase(s.begin()) 删除s.begin()的元素


begin()        ,返回set容器的第一个元素的地址(想返回值注意加*)


       s.begin() 或  *s.begin() 即可


end()      ,返回set容器的最后一个元素的地址(想返回值注意加*)


        s.end()  或 *s.end()即可


clear()          ,删除set容器中的所有的元素


step1:将你的set容器清空。

例如:将刚才定义的s清空,则为:s.clear()即可。


empty()    ,判断set容器是否为空


step1:判断你的容器是否为空。

例如:判断s是否为空,只需 if(s.empty())  即可,判断是否非空,只需if (!s.empty())。


size()      ,返回当前set容器中的元素个数


    例如:询问s的大小,只需 printf("%d\n",s.size())即可。


特别的,size返回的是非重复元素,而不是所有元素。


例如:


s里面有{1 2 3 4 5 6 7 8} 8个元素,那么他的返回值是8;


s里面有{1 1 1 1 1 1 1 1} 8个元素,那么他的返回值是1;


s里面有{1 1 1 2 2 2  2  8} 8个元素,那么他的返回值是3。


insert()              ,向容器中插入一个元素


   作用:往你定义的set里面加上一个数。


step1:定义一个辅助变量tmp;


step2:输入tmp;


step3:将tmp放进你定义的set容器里面。


例如:往刚定义的s里面放个8,那么直接:s.insert(8)即可。


列子1


#include<set>
#include<iostream>
using namespace std;
int main() {
  set<int>s;
  int a[105], n;
  cin >> n;//输入的袁术的个数
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    s.insert(a[i]);
  }
  cout << s.size() << endl;
  while (!s.empty()) {
    cout << *s.begin() << '\t';
    s.erase(s.begin());
  }
  return 0;
}


91f20902da61484d94a409d6486c4652.png


列子2(不用set来去重然后排序)


https://blog.csdn.net/weixin_52062043/article/details/120105315?utm_source=app&app_version=4.16.0&code=app_1562916241&uLinkId=usr1mkqgl919blen


目录
打赏
0
0
0
0
0
分享
相关文章
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
31 2
|
16天前
|
【c++丨STL】set/multiset的使用
本文深入解析了STL中的`set`和`multiset`容器,二者均为关联式容器,底层基于红黑树实现。`set`支持唯一性元素存储并自动排序,适用于高效查找场景;`multiset`允许重复元素。两者均具备O(logN)的插入、删除与查找复杂度。文章详细介绍了构造函数、迭代器、容量接口、增删操作(如`insert`、`erase`)、查找统计(如`find`、`count`)及`multiset`特有的区间操作(如`lower_bound`、`upper_bound`、`equal_range`)。最后预告了`map`容器的学习,其作为键值对存储的关联式容器,同样基于红黑树,具有高效操作特性。
44 3
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
121 2
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
167 3
|
5月前
|
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
102 5
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
123 2
Python错误笔记(一):CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up env
这篇文章讨论了CUDA初始化时出现的未知错误及其解决方案,包括重启系统和安装nvidia-modprobe。
788 0
哈希表模拟封装unordered_map和unordered_set
哈希表模拟封装unordered_map和unordered_set