set
1、头文件
#include<set>
using namespace std;
2、定义
set<int>st;
set<int>st[manx];
set<set<int> >st;
3、访问
只能通过迭代器来访问
set<int>::iterator it;
4、常用函数(见表格)
5、示例(见代码)
6、用途:需要去重但不方便开数组的情况
基本操作 | | 复杂度 |
---|
begin() | 返回指向第一个元素的迭代器 | O(1) |
end() | 返回最末元素的下一个位置的迭代器 | O(1) |
insert() | insert(x)表示将x插入set中 | O(logN) |
find() | find(val)返回set中对应val的迭代器 | O(logN) |
erase() | erase(it)删除迭代器为it的元素,可以结合find()函数俩使用 | O(1) |
| erase(val),val为要删除的元素的值 | O(logN) |
| erase(frist,last)即删除[frist,last)内的所有元素 | O(last-frist) |
size() | 返回set中元素的个数 | O(1) |
clear() | 清空所有元素 | O(N) |
其他 | |
---|
empty() | 如果集合为空,返回true |
count() | 返回某个值元素的个数 |
lower_bound() | lower_bound(val) 返回指向大于(或等于)val的第一个元素的迭代器 |
upper_bound() | 返回大于某个值元素的迭代器 |
swap() | 交换两个集合变量 |
#include<algorithm>
#include<stdio.h>
#include<iostream>
#include<set>
using namespace std;
set<int>s;
set<int>::iterator it;
int main()
{
int m;
printf("输入:");
for(int i=1;i<=5;i++)
{
scanf("%d",&m);
s.insert(m);
}
printf("15的个数:");
cout<<s.count(15)<<endl;
printf("输出:");
for(it=s.begin();it!=s.end();it++)
{
printf("%d ",*it);
}
cout<<endl;
cout<<s.size()<<endl;
s.erase(15);
cout<<s.size()<<endl;
s.clear();
s.empty()?printf("1"):printf("0");
}
multiset
用法和set一样,可以用来求最长上升子序列的长度
定义:
multiset<int>s;
multiset<int>::iterator it;