C++ STL set用法整理

本文详细介绍了C++ STL中的Set与Multiset容器,包括它们的数学概念、内部实现、排序方式、元素插入与查找、以及如何进行元素删除等关键操作。同时,文章还提供了丰富的代码示例,帮助读者深入理解Set与Multiset的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Set

Set 是什么

Set 是 C++STL 中提供的容器, set 是数学上的集合——具有唯一性,即每个元素只出现一次,而 multiset 则是可重集(即每个元素可多次出现),两者的内部实现是一棵红黑树,它们支持的函数基本相同;

排序

set 支持自动排序,默认是由小到大排,和很多其他排序数据结构一样,也可以手写排序,就是重载小于号;

如果是单纯的要由大到小排也可以:set< int,greater<int> >se;//由大到小排序

如果有多个关键字,那么可以手写结构体,重载小于号;

//x为第一关键字,由x由大到小排,其实就是改变原来的排序规则
struct node{
	int x,y;
	bool operator < (const node& rhs) const{return x>rhs.x;}
};
set<node>se;
se.insert((node){2,10});//这个插入比较特别
se.insert((node){10,2});

当然也可以直接pair,省的重载了,这个只限于两个关键字;

//和set的默认排序是一样的,以pair第一个关键字排序
#define pa pair<int,int>
set<pa>se;
se.insert(pa(10,20)),se.insert(pa(100,20));//这个插入比较特别

判断set中是否存在这个元素

set<int>se;
se.count(x);//存在返回1,不存在返回0

迭代器

双向访问迭代器,不支持随机访问,仅支持“++”,“–”这两个算术操作;

这个两个复杂度都为O(lgn);

删除元素

参数可以是元素或者迭代器,返回下一个元素的迭代器,时间复杂度为 O(logn) ,注意multiset 中 s.erase(x) 会删除所有值为 x 的元素;

几个二分查找

说说 find 查找,这个和其他三种不同的是,find 是准确找到要查找的元素 x ,返回其迭代器,如果不存在,则返回set.end();

set<int>se;
if(s.find(x)!=s.end()) {}

其他三种就不重复讲了,注意返回值是迭代器,不是数组下标;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值