set/map/rope/bitset用法

orz hhw posted @ 2015年5月31日 15:18 in 算法学习 with tags 数据结构 Set 算法学习 模板 STL map rope bitset , 3520 阅读
 
Set用法
函数
bst.begin()         返回首元素的迭代器指针
bst.end()          返回尾元素的迭代器指针
bst.insert(key)        插入一个值key
bst.erase(key)         删除地址为key的数
bst.erase(l,r)         删除地址[l,r)的数
bst.size()             目前元素个数
bst.find(key)       返回键值等于key的迭代器指针
bst.count(key)      返回键值等于key的元素的个数
bst.lower_bound(key) 返回键值大于等于key的迭代器指针
bst.upper_bound(key) 返回键值大于key的迭代器指针
 
程序

然后来实战演习,就来做ZJOI2007报表统计吧,实在太SB,懒得手写,现在学了set正好写一发

写是挺容易的,但由于不会MAP,RE了几发,搞了MAP后终于在LJOJ上A了,兴冲冲的去BZOJ上交,没想到TLE了、、

也许是写set姿势不太对,于是加了读入优化,终于卡过了,但似乎是最后一名哈哈

 

 

 

map用法

map构造函数:
   map<int/char/string(原变量),int/char/string(现变量)>mapint/char/string;
map添加数据:
   map<int,string>mp;
   1.mp.insert(pair<int,string>(233,"orzmxh"));
   2.mp.insert(map<int,string>::value_type(521,"orzhzh"));
   3.mp[666]="orzhhw";
   mp->first第一项 mp->second第二项
map函数:
   mp.begin()         返回首元素的迭代器指针
   mp.end()          返回尾元素的迭代器指针
   mp.size()             目前元素个数
   mp.bool()        判断容器是否空,若返回true,表明容器已空
   mp.find(key)       返回键值等于key的迭代器指针
   mp.count(key)      返回键值等于key的元素的个数
   mp.lower_bound(key) 返回键值大于等于key的迭代器指针
   mp.upper_bound(key) 返回键值大于key的迭代器指针
   mp.erase(key)      删除迭代指针key处元素
   mp.erase(l,r)      删除[l,r)之间元素
   mp.swap(mp2)       交换mp和mp2映射元素
   mp.clear()         删除所有元素

Rope用法

头文件:#include<ext/rope>
声明:using namespace __gnu_cxx;
定义:crope x;
函数:
  x.push_back(ch) 在末尾添加字符ch
  x.insert(pos,s) 在pos位置插入字符ch
  x.erase(pos,x)  从pos位置开始删除x个
  x.replace(pos,ch) 将位置为pos的字符换成ch
  x.substr(pos,x) 从pos位置开始提取x个字符
  x.copy(pos,x,s) 将从pos位置开始x个字符提取到s中
  x.at(x)/[x]访问第x个元素

然后听毛主力说ROPE可以可持久化,只要fa[i]=new rope<int>(*fa[i-1]);就行啦

BZOJ3673&3674可持久化并查集,只有700多B,太爽啦

bitset用法

今天打BC被这个坑了,出题人脑子有gin一定要用bitset,不用就超时,也因此失去了38元奖励。。

1.头文件:#include<bitset>
2.定义:bitset<2000000> b(key);//key为初值,但从右向左读
3.函数:b.any()    b中是否存在置为1的二进制位
b.none()        b中不存在置为1的二进制位吗
b.count()       b中置为1的二进制位的个数
b.size()        b中二进制位的个数
b[pos]         访问b中在pos处的二进制位
b.test(pos)      b中在pos处的二进制位是否为1
b.set()         把b中所有二进制位都置为1
b.set(pos)       把b中在pos处的二进制位置为1
b.reset()       把b中所有二进制位都置为0
b.reset(pos)     把b中在pos处的二进制位置为0
b.flip()        把b中所有二进制位逐位取反
b.flip(pos)      把b中在pos处的二进制位取反
b.to_ulong()     用b中同样的二进制位返回一个unsigned long值
os << b        把b中的位集输出到os流
 

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter