随便玩了玩pb_ds库

  前两天叉姐的浣熊群里有人提到了pb_ds库这样一个东西,于是就去查了查,发现似乎还挺好玩的。鉴于网上pb_ds库的中文资料少得可怜,我也就简单整理下。

  pb_ds库大概是GNU对C++的一个扩展库,地位上必然是不如TR1这种基本成为官方标准的扩展库,但也是G++编译器默认附带的库。我在少数几个OJ上做了测试,CF和SPOJ都可以成功编译,但POJ和HDU都找不到头文件令我大失所望(事实上经我测试,连TR1的扩展如unordered_map都无法支持,我估计boost库也全都无法使用)。其实我是寄希望于在ACM现场赛可以使用……

  pb_ds库全称是Policy-Based Data Structures,可见是一些数据结构的集合,主要是Hash表,平衡二叉树、Trie树,优先队列(堆)等。英文官方文档传送门,里面有对各种数据结构的接口说明以及部分操作的性能测试。我现在只是试用了不多的几种结构,先写出来好了。

  优先队列(Priority Queue)

  我们知道在标准模板库(STL)中自带了priority_queue,在相当意义上替代了堆(Heap)的作用(我会说我已经好久没有手写堆了么)。但是在某些情况下,我们发现它并不能很好地应对某些需求,尤其是在一些图论算法中。比方说堆优化的Dijkstra,需要对优先队列中的元素的值进行修改;比方说一些题目需要对若干个堆进行合并。对于前者我们往往是记录了每个点对应的当前最短dist,然后将每次更新都入队(换言之存在重复入队),出队的值与当前dist不同的元素直接忽略掉(见这份板子中的代码),其实是存在时空浪费的;对于后者我们往往要手写左偏树或斜堆等数据结构来代替STL优先队列。此外在一些情况下,我们对STL自带优先队列的速度并不满意,甚至对手写堆的速度也不满意,如BZOJ3040就需要手写斐波那契堆或配对堆(恶心题还是要找中学生的题库啊),但斐波那契堆的难写大家也都是明白的。

  所以,我们需要一个方便易用不需手打的替代品。pb_ds库基本上

  • 10
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值