STL使用————SET&MULTISET
Posted Star_Feel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL使用————SET&MULTISET相关的知识,希望对你有一定的参考价值。
SET函数的基本用法 by hhl
使用set的好处
1. 当增加元素后,集合会自动删重并从小到大排列(时间比快排还快)
2. 相当于一棵伸展树(能快速求出前驱后继)
使用基础
#include<set> set <数据类型(int,long long,double,bool..)> 名称(A,B,C,D...) set <数据类型(int,long long,double,bool..)> :: iterator it
例题
题目:输入n个数,输出一个无重复从小到大的集合。
输入:第一行输入n,第二行输入n个数(a[1],a[2]….a[n])
输出:无重复从小到大的集合
代码:
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<set> using namespace std; set <int> S; set <int> :: iterator it; int a[110]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); S.clear(); for(int i=1;i<=n;i++) S.insert(i); for(it=S.begin();it!=S.end();it++)//从集合的开始到末尾输出 { printf("%d\n",*it); } return 0; }
**noi 1.10 09:明明的随机数**
【传送门:noi 1.10 09】
代码:
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<set> using namespace std; set <int> S; set <int> :: iterator it; int a[110]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); S.clear(); for(int i=1;i<=n;i++) S.insert(a[i]); printf("%d\n",S.size()); for(it=S.begin();it!=S.end();it++)//从集合的开始到末尾输出 { printf("%d ",*it); } return 0; }
**HDU1412: {A} + {B}**
【传送门:HDU1412】
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<set> using namespace std; set <int> S; set <int> :: iterator it; set <int> :: iterator it1; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { S.clear(); for(int i=1;i<=n+m;i++) { int x; scanf("%d",&x); S.insert(x); } it1=S.end(); it1--; for(it=S.begin();it!=it1;it++) { printf("%d ",*it); } printf("%d\n",*it); } return 0; }
不删重set函数:multiset
multiset与set的区别就是不会删重,但是依旧会从小到大排列
set中使用的函数在multiset同样适用
使用基础
#include<set> multiset <数据类型(int,long long,double,bool..)> 名称(A,B,C,D...) multiset <数据类型(int,long long,double,bool..)> :: iterator it
使用函数
SET MULTISET 常用函数 使用:S.函数名() begin()--返回指向第一个元素的迭代器 clear()--清除所有元素 count()--返回某个值元素的个数 empty()--如果集合为空,返回true end()--返回指向最后一个元素的迭代器 equal_range()--返回集合中与给定值相等的上下限的两个迭代 erase()--删除集合中的元素 find()--返回一个指向被查找到元素的迭代器 get_allocator()--返回集合的分配器 insert()--在集合中插入元素 lower_bound()--返回指向大于(或等于)某值的第一个元素的 key_comp()--返回一个用于元素间值比较的函数 max_size()--返回集合能容纳的元素的最大限值 rbegin()--返回指向集合中最后一个元素的反向迭代器 rend()--返回指向集合中第一个元素的反向迭代器 size()--集合中元素的数目 swap()--交换两个集合变量 upper_bound()--返回大于某个值元素的迭代器 value_comp()--返回一个用于比较元素间的值的函数
以上是关于STL使用————SET&MULTISET的主要内容,如果未能解决你的问题,请参考以下文章
STL——容器(Set & multiset)的删除 erase