STL之——set
是什么
头文件及声明
#include <set>
set<int> s1;
set<pair<int, int> > s2;
set<set<int> > s3; //可以嵌套
set<vector<int> > s4; //可自选类型
就像其他需要排序的数据类型一样,为一个结构体的
struct node{
......;
bool operator <(const node &other) {
return x > other.x;
}
};
set<node> s;
内置函数
统计
用法:名称.size();
eg.
int num = s.size();
检查
用法:名称.empty();
eg.
if(s.empty()) cout << "Myset is Empty." << endl;
清空
用法:名称.clear();
eg.
s.clear();
返回
用法:名称.count(x)
eg.
if(!s.count(x)) ans++;
迭代器
双向访问迭代器,不支持随机访问,支持星号解除引用,仅支持 ++--
这两个算术操作。
引用和操作:
set<类型>::iterator it;
eg.
set<int>::iterator it = s.begin();
it++;
it--;
若把 it++
,则 it--
,则
++ --
操作的复杂度均为
遍历 及访问其中的元素
//set
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout << *it << endl; //取出这个迭代器指向的元素
//set嵌套
for(set<set<int> >::iterator it = s.begin(); it != s.end(); it++)
{
//首先取出set中嵌套的set
for(set<int>::iterator rit = (*it).begin(); rit != (*it).end(); rit++)
cout << *rit << ' '; //遍历这个set
cout << endl;
}
返回集合的首迭代器,即指向集合中最小元素的迭代器,时间复杂度为
用法:名称.begin();
eg.
map<int>::iterator it = s.begin();
返回集合的尾迭代器,众所周知,
用法:名称.end();
eg.
maxn = *(--s.end()); //取出最大元素
在
PS:
用法:名称.insert(set类型);
eg.
s.insert(3);
删除,参数可以是元素或者迭代器,返回下一个元素的迭代器,时间复杂度为
,注意在
用法:名称.erase(参数);
eg.
set<int>::iterator it = s.begin();
s.erase(it);
s.erase(3);
s.erase(itl, itr);
在
用法:名称.find(x);
eg.
if(s.find(x) != s.end()) cout << "Have Found!" << endl;
两个神奇的东西,决定把他们放在一块谈一谈。
用法与
举个例子:
在
对于在
对于在
两个函数返回的则都是
特殊地,对于比
两个函数返回的都是 s.end()。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】