【C++ STL】Set用法

C++中set使用及介绍(超详细+入门+代码解析) C+帮助文档:链接:Set的文档介绍set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。 阅读详情

本文为本蒟蒻仅会的Set用法,求大神指教

Set,C++中的集合函数,采用红黑平衡树维护
multiset跟set差不多,但允许一个值出现多次

注意:以下代入的地址begin,end均为左闭右开区间
注意:以下代入的地址begin,end均为左闭右开区间
注意:以下代入的地址begin,end均为左闭右开区间

定义:

set<类型> 变量
可以套用,如:map<int,set<int> >a (注意有空格)
当然也可以:set<int> a(cmd)

常见用法:

a.begin():返回a的所有值中最小值的地址
*a.begin():返回a的所有值中最小的值
a.end():返回a的所有值中最大值后面的地址(左闭右开)
a.count(k):k这个数在集合a中出现了多少次(如果a不是multiset,返回值为0/1)
a.empty():是否为空(等价于a.begin()==a.end())
a.size():返回元素个数(a.count(x)之和)
a.find(k):返回a中k这个元素的地址(没找到返回end())
a.equal_range(k):返回为一个pair,first是a中第一个大于等于k的数,second是第一个大于k的数
a.lower_bound(k):跟int的一样用法
a.upper_bound(k):跟int的一样用法

a.clear():删除所有元素
a.insert(k):把k这个数插入到a中
a.erase(k):把k这个数从a中删除(k可以为地址)
a.erase(first,last):把a中地址first到last的元素全部删掉(不会判地址错误)
a.swap(b):把集合a与集合b交换

以上操作复杂度均为log(常数+++),除了insert(begin,end)和erase(begin,end)是O(n)的

详细用法演示

以下部分来源于这里,当然也有内容来自于网上各大博主的blog,在此表示感谢

以下程序中的n表示集合中数的个数,m为询问个数,
运行均在JZOJ的评测机上

equal_range(k)

返回值为pair,first是a中第一个大于等于k的数,second是第一个大于k的数。

#include <cstdio>
#include <cstdlib>
#include <set>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n;
set<int> a;
int main()
{
    int q;
    scanf("%d",&n);
    fo(i,1,n)scanf("%d",&q),a.insert(q);
    printf("-------------\n");
    pair<set<int>::const_iterator,set<int>::const_iterator> ans;
    ans=a.equal_range(3);
    printf("%d\n",*ans.first);
    printf("%d\n",*ans.second);
    return 0;
}

运行结果:

5
1 2 3 4 5
-------------
3
4
请按任意键继续. . .

lower_bound(k)和upper_bound(k)

跟普通的一样意思,返回的是地址

#include <cstdio>
#include <cstdlib>
#include <set>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n;
set<int> a;
int main()
{
    int q;
    scanf("%d",&n);
    fo(i,1,n)scanf("%d",&q),a.insert(q);
    printf("------------\n");
    printf("%d\n",*a.lower_bound(3));
    printf("%d\n",*a.upper_bound(3));
    return 0;
}

运行结果

10
1 1 2 2 3 3 4 4 5 5
------------
3
4
请按任意键继续. . .

insert(k)

有2种用法:
a.insert(begin,end):把地址begin~end的全部插入到a中
a.insert(k):把a插入集合a中,返回值为pair<set<int>::iterator,bool>,bool表示插入是否成功(a中是否有这个数),地址则为插入位置,而如果时multiset的话,返回值就只有set<int>::iterator(总是会成功)

C++STL中list, vector, map, set用法与区别 List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。 Vector与list Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。 List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要... 阅读详情

相关推荐

FDTD Script命令学习-farfield3d/farfieldux/farfielduy

介绍了farfield3d/farfieldux/farfielduy命令功能,及不同应用语法和参数介绍,以及对官网示例进行介绍。

jxxl_1314的博客 3098

c++ set用法 入门必看 超详细

1、set的作用 set就是集合的意思,集合的特点就是不会出现重复的内容。一般用来作查重或去重操作,举个场景,给出一个表: 姓名 爱好 小明 打篮球 小刚 画画 小明 听音乐 问该表中出现了多少个人,学会了set,就可以很轻松地解决这个问题 2、set的定义 set<储存的类型> 容器名 如: 储存int型的值 set<int> s; 储存double型的值 set<double> s; 储存string型的值 set<string&gt

weixin_52115456的博客 5万+

AMD Ross FPGA Agent 实战:用 AI 驱动 Vivado 开发流程

在 EDA 领域,FPGA 开发长期面临工具链重、反馈周期长、报错晦涩等痛点。AI Agent 通过自然语言交互与工具调用,将 Vivado 的 Tcl 批处理流程封装为可编排、可观测的智能体,显著降低查文档与读报告的时间成本。其核心在于 Harness 与 Agent 的协同:Harness 提供安全执行环境,Agent 负责决策与迭代。典型应用包括工程创建、约束生成、综合实现报告解读及比特流失败排查。本文以 AMD Ross 为例,拆解其架构设计与实操方法,帮助开发者理解如何将 Agent 落地到高门槛

weixin_29189363的博客 1029

详解c++---set的介绍

set容器的介绍

qq_68695298的博客 1万+

三轴加速度传感器计步算法优化:动态阈值与滤波技术的实践应用

本文深入探讨了三轴加速度传感器计步算法的优化实践,重点分析了动态阈值调整与高效滤波技术如何协同提升计步精度与鲁棒性。通过对比均值滤波的局限,引入向量模长计算、多级自适应阈值以及状态机判决逻辑,并结合代码示例,为嵌入式及移动应用开发者提供了应对复杂运动场景的实用解决方案。

cherry的博客 501

SpringBoot与锐浪报表服务器深度整合实战指南

本文详细介绍了SpringBoot与锐浪报表服务器的深度整合实战指南,包括环境准备、Windows/Linux系统配置、核心功能实现代码解析及常见问题解决方案。通过具体案例和代码示例,帮助开发者高效完成报表系统的集成与部署,提升企业级应用的报表处理能力。

weixin_29238147的博客 370

set详讲(C++)

set是STL中的容器之一,不同于普通容器,它的查找速度极快,常用来存储各种经常被检索的数据,因为容器的底层是平衡二叉搜索树中的红黑树。除此之外,还可以借助其特殊的性质,解决部分难题。

weixin_47271425的博客 7523

从d、q轴电流到电机性能:FOC控制中角度偏移的实战影响与调试策略

本文深入探讨了永磁同步电机FOC控制中d、q轴电流与角度偏移对电机性能的影响及调试策略。通过分析角度偏移导致的效率下降、电流异常等问题,提供了实用的四步调试法和参数优化技巧,帮助工程师有效提升电机控制精度和效率。

weixin_29264201的博客 294

深入浅出C++ ——set类深度剖析

官方文档set是按照一定次序存储元素的容器在set中,元素的value标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用红黑树实现的。set特点。

weixin_55051736的博客 6713

MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器

本示例展示了如何利用非线性模型预测控制(MPC)为四旋翼飞行器设计一个跟踪轨迹的控制器。

机器人控制与仿真应用 4432

MTEX包在Matlab中实现从EBSD数据生成Abaqus网格与晶粒取向:一种对用户材料旋转矩阵分量实践的全面指南

此教程提供了一种使用MTEX Matlab包处理EBSD数据的方法,并生成Abaqus输入文件,这对于进行多晶体有限元分析具有极大的帮助。但值得注意的是,这只是一个基本的例子,实际应用中可能需要根据您的实际需求进行调整。MTEX包还提供了许多其他的功能,可以进行更复杂的分析和处理,我非常推荐您去探索。希望这篇文章能对您有所帮助,如果您有任何疑问或建议,欢迎留言交流。在接下来的文章中,我将会介绍更多关于MTEX的高级功能,敬请期待。– (完)–

qq_38334677的博客 4437

【c++】【STL】set的常用用法

set<int> s;可以使用greater<>使set 以降序方式存储。(默认为升序)可以通过传入仿函数或 Lambda 表达式自定义排序规则。操作set 复杂度解释插入O(log n)基于红黑树的平衡插入删除O(log n)通过旋转和调整保持平衡查找O(log n)二叉搜索树的搜索。

m0_64014551的博客 2029

产品路线图的三种模型(RICE/MoSCoW/Kano),教你如何对需求进行优先级排序

RICE/MoSCoW/Kano三种模型,教你如何对需求进行优先级排序。 也许你会让业务提供一份ROI,记得前不久参加过一场立项会评审,一位很有意思的小产品在会上讲不清楚ROI,评审们要求会后重新梳理,小产品表达不要为难业务方干一些他们不擅长的事了。这个看似笑话的经历,背后隐藏着价值判断已经流于形式。 也许你会要求业务方直接给出需求优先级列表,把任务分为P0到P5,这样的划分除了按需求本质的优先级还同时考虑了开发资源、开发难度等问题。毫不夸张地说,我曾经拿到一张全是P0级别的需求清单,如果一切任务都是高

wenyusuran的专栏 5542

C++中STL模板中set的用法总结

作者的身份是一名普通的大一计科学生,对于cpp的理解浅薄,还请批评指出。可能这篇文章更适用于初高中的oier~重在如何使用而非严谨的底层原理set正式名字叫做关联容器,它的关联性在于它内部是用红黑树对所有元素排序的Stop!set是默认按升序顺序排序好的一般来说树结构存在形式,其中key用于排序,value为其值,只是在set中value与key值是一样的,但它仍然属于关联容器。

weixin_43720735的博客 895

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

c++ stl集合set介绍c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数3) ...

weixin_30220465的博客 1450

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++ STL容器 —— set/multiset 用法详解

C++ STL容器 —— set/multiset 用法详解 写在前面:近期正在学习C++的STL容器,因此在这里做一下日志记录,主要介绍一些容器基本成员函数的用法, 配上实际用例,并不涉及原理。但别人的博客终究是别人的, 最好自己上手操作一下. 写的不好, 请大神手下留情. 下面说的 “运行之后” 表示: 运行上个语句之后的结果. 一行如果说的太长的话, 就得拖动下面的进度条才能看到后面的内...

Ember_Sky 1223

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++ STL set用法详解

和lower_bound()很像,但是upper_bound是返回第一个>x的迭代器,不存在则返回end()count(x) 可以返回set中x元素出现的次数,由于set自动去重,所以只返回(0/1)也可以这么理解:find(x) 找到了返回x的迭代器,找不到返回数组元素个数迭代器。注:insert有很多种形式,由于博主太菜,不会,就分享这一种。find(x) 如果找到了,返回迭代器,找不到返回s.end()这个比size还简单,如果set非空,那么返回0,否则返回1。创建一个int型,名称是s的set。

ltl1的博客 2545

C++ STL中set的一些用法

 C++ STL中set的一些用法 #include #include #includeusing namespace std;int main(){int i;char b[10];for( i = 0; i seta(b,b+10);set::iterator p;for( p = a.begin(); p != a.end(); p++ ){   cout }co

1102

c++ stl set容器常用用法

et是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。

shuaizhijun的博客 2万+

c++STL set简单用法

c++STL set简单用法set容器中的元素不会重复,当插入集合中已有的元素时,并不会插入进去,而且set容器里的元素自动从小到大排序。即:set里面的元素不重复 且有序常见方法代码 含义s . begin() 返回set容器的第一个元素的地址(迭代器)s . end() 返回set容器的最后一个元素的下一个地址(迭代器)s . rbegin() 返回逆序迭代器,指向容器元素最后一个位置s . rend() 返回逆序迭代器,指向容器第一个元素前面的位置。

weixin_45063703的博客 363

C++ STL set容器常用用法

set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric

CerberuX's Life 3万+

ACM cpp stl set 用法

stl set//集合,元素唯一不可重复 使用平衡的搜索树——红黑树实现 因此插入、删除和查找数据时间复杂度为O(logN) //定义 set s1; //扫描整一个set所有的元素,用迭代器 for (set::iterator i=s1.begin(); i!=s1.end(); i++)      cout //元素插入: //1,(常用)insert,插入

nickwong & nickwang 2093

C++ STL之set用法总结

一、set的特点 关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为...

happend的博客 1344

C++ STL Set常用用法详解

6.2 set的常见用法详解 ​ 是一个内部自动有序且不含重复元素的容器。 要使用set,需要加头文件#include 1. set的定义 ​ set<typenname> name; ​ 其中typename可以是任何基本类型,例如int、double、char、结构体等,也可以是STL标准容器,例如vector、set、queue等 2.set容器内元素的访问 ​ set<typename>::iterator it; ​ 注:set只能通过迭代器访问。且除vector

小李的博客 527

C++ STL set 完全指南:从基础用法到实战技巧

本文全面介绍了C++ STL中的set容器,重点讲解了其自动排序、元素唯一等核心特性及底层红黑树实现。通过代码示例详细演示了set的初始化、插入、查找、删除等基础操作,并对比了multiset允许重复元素的特点。文章还展示了set在解决环形链表检测和数组交集问题中的实战应用,体现了set在数据去重和有序处理方面的优势。掌握set的使用能有效提升"去重+排序"场景的开发效率和代码可读性。

心向往之,行必能至 1211

【C++STL】set,multiset用法详解

std::set 是 C++ 标准模板库(STL)中的一种有序关联容器。它存储的元素都是唯一的,并且容器会按照元素的值自动进行排序。你可以把它想象成一个数学意义上的集合——每个元素只能出现一次,并且内部是天然有序的。核心特点所有元素在容器中总是按键(即元素本身)的升序排列。排序规则默认使用,即运算符,你也可以通过模板参数指定自定义的比较函数(例如实现降序)。容器中。判断相等的标准是比较结果不为true(即),等价于“等价”而非“相同地址”。插入重复元素时,插入操作会被忽略。

2301_80224556的博客 965
上一篇: 【GDOI 2017】【JZOJ 1502】小学生语文题
下一篇: 【C++ STL】queue和priority_queue
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值