STL库与pb_ds库简单应用

前者不开O2时谨慎使用!

后者尽量不要用!

STL库介绍比较多,其中字符串库用的比较少但也应该记住

http://www.cnblogs.com/rvalue/p/7276883.html

http://www.cnblogs.com/rvalue/p/7327293.html

pb_ds差别不大,但这两个库最大的缺陷就是几乎无法用gdb调试,只能手工输出

下面这个程序运行出来之后就是个小教程

#include<cstdio>
#include<vector>
#include<ext/pb_ds/priority_queue.hpp>
#include<ext/pb_ds/assoc_container.hpp>

struct Cmp{
    int operator() (const int &a,const int &b) { return a>b; }
};

using namespace std;
using namespace __gnu_pbds;
typedef __gnu_pbds::priority_queue<int,Cmp,pairing_heap_tag > Que;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> Tree;

Que a,d;
Que::point_iterator p=a.push(0);
Tree b,c;
Tree::const_iterator it;

int main(){

    puts("");
    puts("---------using namespace __gnu_pbds---------");
    puts("");

    puts("---Include<ext/pb_ds/assoc_container.hpp> for ‘tree‘---");
    puts("");

    it=b.insert(200).first;
    puts("Insert(int x) returns pair<iterator,bool>");
    printf("b.insert(200).first:%d\n\n",*it);

    b.insert(100);
    puts("Find_by_order(int x) returns the x+1 least element const_iterator");
    printf("b(100,200).find_by_order(1):%d\n\n",*b.find_by_order(1));

    puts("Order_of_key(int x) returns the rank-1 of element‘x‘");
    printf("b(100,200).order_of_key(100):%d\n\n",b.order_of_key(100));

    b.split(100,c);
    puts("Split(int key,Tree C)clear C at first,and move the element larger than key into C");
    printf("b(100,200).split(100,c),     c.begin():%d\n\n",*c.begin());

    puts("---Include<.../priority_queue.hpp> for ‘priority_queue‘---");
    puts("");

    puts("push(int x) returns the inserted point_iterator");
    printf("a.push(0) , *p=*a.push(0):%d\n\n",*p);

    a.push(1); a.push(3); a.modify(p,2);
    puts("Modify(iterator,int) change the value of (*p),this heap is maintained automatically");
    printf("a.modify(p,2) , *p:%d\n\n",*p);

    a.erase(p);
    puts("Erase(iterator) delete this element,this iterator dies");
    printf("a.erase(p) , a.top():%d\n",a.top());
    a.pop(); printf("a.pop() , a.top():%d\n\n",a.top());

    d.push(-1); a.join(d);
    puts("a.join(d) join d into a , and then maintain a,clear d");
    printf("d.push(-1) , a.join(d) ,a.top():%d\n\n",a.top());

    puts("----Other functions are not normally used in contests----");
    return 0;
}

三份比较好的教程

https://gitee.com/HocRiser/templates/blob/master/Others/C_ext_pb_ds_1.pdf

https://gitee.com/HocRiser/templates/blob/master/Others/C_ext_pb_ds_2.pdf

https://gitee.com/HocRiser/templates/blob/master/Others/STL.pdf

没有这方面的例题,万不得已的时候才会用

上面有篇文章中说经测试一般不慢于STL库,但实测有不少情况下常数有STL的三倍之多。

且考场上是否允许使用仍有争议(NOI2017现场有人用没出事但不代表其他考试一定没事)

原文地址:https://www.cnblogs.com/HocRiser/p/8178619.html

时间: 2024-11-05 20:39:38

STL库与pb_ds库简单应用的相关文章

C++ pb_ds库之hash

pb_ds库之hash 最近在做hash的模板题,自己手打的的hash代码长还容易出错. 但STL中有一个pb_ds库,里面的hash函数和手打的hash速度差不多,比STL中的map快多了. 与大家分享一下,不足之处还请各位神犇指出和补充. 本文只是简略地介绍此函数在hash中的应用,若想深入研究,这里有一个:C++的pb-ds库在OI中的应用 网址:https://wenku.baidu.com/view/ffc18b542f60ddccdb38a00d.html?pn=NaN pb_ds库

STL笔记(6)标准库:标准库中的排序算法

STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew Austern http://www.cuj.com/experts/1908/austern.htm?topic=experts 用泛型算法进行排序    C++标准24章有一个小节叫“Sorting and related operations”.它包含了很多对已序区间进行的操作,和三个排序用泛型

C++学习笔记——STL(标准模板库)

1.首先.需要学习C++ 模板的概念 2.C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. 3.C++ 标准模板库的核心包括以下三个组件: 组件 描述 容器(Containers) 容器是用来管理某一类对象的集合.C++ 提供了各种不同类型的容器,比如 deque.list.vector.map 等. 算法(Algorithms) 算法作用于容器.它们提供了执行各种操作的方式,

linux学习 建立静态库,动态库,写简单的makefile

建立静态库 建立四个文件 bin(可执行文件),lib(库),include(头文件),src(放源文件) 这里的起的库明为add 在src文件中执行 1)gcc -c add.c //编译add.c源文件生成add.o目标文件 2)ar crsv ../lib/ libadd.a add.o //对目标文件*.o进行归档,生成lib*.a, 把这个生成文件放在lib里 3)gcc -o main main.c -L(大些的爱偶,放库的路径)../lib   –l(小写的爱偶,库名为add) a

客户端网络库实现真的很简单吗?

(注:本文所讲的网络协议只针对TCP协议) 背景:开发一个C/S的应用势必需要服务端和客户端的适配,包括网络协议.数据传输格式.业务处理的适配.由于服务端承载着大量的客户端,需要高并发.高性能.高可靠性,在我们的认知里往往认为服务端的网络模型和架构设计很复杂.但是客户端嘛,无非就是建立网络连接,发个请求收个回复如此简单.所以在工作中经常会出现有些客户端处理界面和业务的同事对平台开发者说,你做好服务端的网络就好,客户端的网络我来处理,而且在他们的想法里,这个所谓的客户端网络库只需要很短的时间就可以

Win8.1下FreeImage.lib库的配置和简单使用(转)

转自http://www.codeweblog.com/win8-1下freeimage-lib库的配置和简单使用/ 首先,你可以从这里获取FreeImage的完整库文件(访问密码 9a5e). 配置过OpenGL的同学,可以直接跳过这个部分,VS中配置FreeImage库和配置OpenGL库的流程完全相似.强调一点的是,虽然本人使用的是win8.1下的VS2013,但是个人觉得win7上下的操作系统或者VS2010以上的VS都可以按照这个步骤级逆行配置.可能有区别的是可能共享的Demo不能够直

iOS实用技能扩展-静态库的制作与简单使用

前言:此文是关于静态库的概念描述,如何制作及简单调试使用,不同版本的说明与场景使用. 1.关于库的简介: 库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking 闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 2.静态库的特点:.a+.h; 为什么制作闭源库 国内的企业,掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用 例如:百度地图,友盟,JPush等 在

c++ pb_ds库,实现 红黑树,Splay

C++ pb_ds库 #include <ext/pb_ds/assoc_container.hpp>#include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; 定义一颗红黑树 tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>t; int 关键字类型 null_type无映射(低版本g++

GitHub开源库排名一百的简单介绍,值得收藏!

GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者快速了解当前一些流行的 Android 开源库. iOS 版本的在此: https://github.com/Aufree/tri