STL中的set与multiset
来源:互联网 发布:校园寝室网络设计方案 编辑:程序博客网 时间:2024/05/22 11:15
终于打过平衡树了!我来写写set的小科技。写得不一定完全。
调用和定义
首先
#include<set>
然后就
set<struct_type> nameormultiset<数据类型> 名字
不需要给set开空间的~~~
进一步了解
实际上set或multiset是个平衡树,只要重定义 < 就可以用来干很多事情。
每一个位置是一个迭代器,就像指针一样,迭代器支持++运算。然后要取值就要用*号,比如我们用一个变量赋给它迭代器的值,即指向。
set<struct_type> sset<struct_type> :: iterator poto=s.begin()其中poto前面是定义那种类型的set的迭代器,s.begin()则是查找set开头的迭代器的函数。然后我们for(poto=s.begin;poto!=s.end();++poto)就可以遍历完整个sets.end()是获取结尾迭代器的函数,结尾迭代器一般指向null
一些操作及注意
厚颜无耻地复制一波WerKeyTom_FTD的操作并添加注解~~~
假设我们定义的多重集叫s。
调用set自带函数用 s.functionname() 类似的语句
begin()返回指向第一个元素的迭代器
clear()清除所有元素
count()返回某个值元素的个数
empty()如果集合为空,返回true
end()返回指向最后一个元素的迭代器
insert()在集合中插入元素
erase()删除集合中的元素 ,注意这里要的参数不是元素,是元素的迭代器,即位置。
lower_bound()返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound()返回大于某个值元素的迭代器 ,注意这两个bound并不是相反的。
size()集合中元素的数目
swap()交换两个集合变量
equal_range()返回集合中与给定值相等的上下限的两个迭代器
find()返回一个指向被查找到元素的迭代器
get_allocator() 返回集合的分配器
key_comp()返回一个用于元素间值比较的函数
max_size()返回集合能容纳的元素的最大限值
rbegin()返回指向集合中最后一个元素的反向迭代器
rend()返回指向集合中第一个元素的反向迭代器
value_comp()返回一个用于比较元素间的值的函数
代码
是打dijkstra带上的set,参考一下
#include<cstdio>#include<iostream>#include<set>using namespace std;#define fo(i,j,k) for(i=j;i<=k;i++)const int N=10005,inf=10000007;struct rec{ int i,dis;}dur,tmp;multiset<rec> b;int i,j,k,n,dis[N],m,x,y,z,tt,p;int bc[2*N],c[2*N],first[N],next[2*N],pd[N];bool operator <(rec a,rec b){ return a.dis<b.dis;}int cr(int x,int y,int z){ tt++; bc[tt]=y; c[tt]=z; next[tt]=first[x]; first[x]=tt;}void dij(){ fo(i,1,n) dis[i]=inf; pd[1]=1; dur.i=1; dis[1]=dur.dis=0; b.insert(dur); while (!b.empty()) { do { dur=*b.begin(); b.erase(b.begin()); }while (pd[dur.i]!=1&&!b.empty()); if(pd[dur.i]!=1) break; for(p=first[dur.i];p;p=next[p]) { if (dis[bc[p]]>dis[dur.i]+c[p]) { pd[bc[p]]=1; dis[bc[p]]=dis[dur.i]+c[p]; tmp.i=bc[p]; tmp.dis=dis[bc[p]]; b.insert(tmp); } } pd[dur.i]=2; } return;}int main(){ freopen("dij.in","r",stdin); scanf("%d%d",&n,&m); fo(i,1,m) { scanf("%d%d%d",&x,&y,&z); cr(x,y,z); cr(y,x,z); } dij(); if (dis[n]==inf) printf("-1"); else printf("%d",dis[n]);}
- STL中的set与multiset
- STL-------set与multiset
- STL中的set和multiset学习小记
- c++的stl中的set/multiset
- STL之Set与Multiset(转)
- 第20章STL set与multiset
- STL中set与multiset的区别
- STL set 与 multiset 2016.10.25
- (STL之set与multiset)SPOJ
- STL容器:set,multiset
- STL:set(multiset)
- STL---set和multiset
- STL set和multiset
- STL set和multiset
- STL - set和multiset
- set multiset c++ stl
- STL--set multiset
- stl->set/multiset
- NodeJS学习三之API
- 300. Longest Increasing Subsequence(C++实现)
- 国标28181sip开源库介绍(陆续补充完备)
- MySQL日期查询:本周、本月、本季、本年
- HDU 4405 Aeroplane chess
- STL中的set与multiset
- 1.1 Python简介
- The JSP specification requires that an attribute name is preceded by whitespace
- hdu 3065 病毒侵袭持续中
- Node.js简单介绍
- IE中的ActiveXObject对象-基础
- Linux字符设备驱动结构
- ios时间戳与时间的转换
- 心情日记