WKC的STL——priority_deque系统解说

· · 个人记录

前言:

这个安装完成后这可以在自己的DEV-C++中使用,否则后果自负。

安装:

首先,你需要拷贝一下代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define INT LONG_LONG
#define INF 0x7f
struct priority_deque{
    deque<int>q;
    int a[]={};
    int note=INT_MAX;
    void note_in(int x){
        note=x;
        return ;
    }
    int note_out(){
        return note;
    }
    void push(int x){
        int use=rand()%2;
        if(use==0){
            q.push_back(x);
        }
        else{
            q.push_front(x);
        }
        return ;
    }
    void pop(){
        int use=rand()%2;
        if(use==0){
            q.pop_back();
        }
        else{
            q.pop_front();
        }
        return ;
    }
    void out(int l,int r,int f){
        int top=0;
        while(!q.empty()){
            a[++top]=q.back();
            q.pop_back();
        }
        if(f<=-1){
            for(int i=l;i<=r;i++){
                cout<<a[i]<<" ";
            }
        }
        else if(f==0){
            for(int i=l;i<=r;i++){
                cout<<a[i]<<'\n';
            }
        }
        else if(f>=1){
            for(int i=l;i<=r;i++){
                cout<<a[i]<<endl;
            }
        }
        for(int i=1;i<=top;i++){
            q.push_front(a[i]);
        }
        return ;
    }
    int size(){
        return q.size();
    }
    void push_back(int x){ 
        q.push_back(x);
        return ;
    }
    void push_front(int x){
        q.push_front(x);
        return ;
    }
    void p_sort(bool f){
        int top=0;
        if(f==1){
            priority_queue<int,vector<int>,less<int> >q1;
            while(!q.empty()){
                q1.push(q.front());
                q.pop_front();
            }
            while(!q1.empty()){
                a[++top]=q1.top();
                q1.pop(); 
            }
            for(int i=1;i<=top;i++){
                q.push_front(a[i]);
            }
        }
        else{
            priority_queue<int,vector<int>,greater<int> >q2;
            while(!q.empty()){
                q2.push(q.front());
                q.pop_front();
            }
            while(!q2.empty()){
                a[++top]=q2.top();
                q2.pop(); 
            }
            for(int i=1;i<=top;i++){
                q.push_front(a[i]);
            }
        }
        for(int i=1;i<=top;i++){
            q.push_front(a[i]);
        }
        return ;
    }
    void pop_back(){
        q.pop_back();
        return ;
    }
    void pop_front(){
        q.pop_front();
        return ;
    }
    bool empty(){
        return q.empty();
    }
    int front(){
        return q.front();
    }
    int back(){
        return q.back();
    }
    void clear(){
        while(!q.empty()){
            q.pop_back();
        }
        return ;
    }
    bool two_points_bool(int x){
        int r=0,l=1,mid;
        priority_queue<int,vector<int>,greater<int> >q2;
        while(!q.empty()){
            q2.push(q.front());
            q.pop_front();
        }
        while(!q2.empty()){
            a[++r]=q2.top();
            q2.pop(); 
        }
        for(int i=1;i<=r;i++){
            q.push_front(a[i]);
        }
        while(l<=r){
            mid=(l+r)/2;
            if(a[mid]<x){
                l=mid+1;
            }
            else if(a[mid]>x){
                r=mid-1;
            }
            else if(a[mid]==x){
                return 1;
            }
        }
        return 0;
    }
    int two_points_int(int x){
        int r=0,l=1,mid;
        priority_queue<int,vector<int>,greater<int> >q2;
        while(!q.empty()){
            q2.push(q.front());
            q.pop_front();
        }
        while(!q2.empty()){
            a[++r]=q2.top();
            q2.pop(); 
        }
        for(int i=1;i<=r;i++){
            q.push_front(a[i]);
        }
        while(l<=r){
            mid=(l+r)/2;
            if(a[mid]<x){
                l=mid+1;
            }
            else if(a[mid]>x){
                r=mid-1;
            }
            else if(a[mid]==x){
                return mid;
            }
        }
        return -1;
    }
};

保存为priority_deque这里记得包.cpp后缀改成.h。
接下来写入这个代码:

#include<bits/stdc++.h>
#include<queue>
using namespace std;
#define int long long
#define endl '\n'
signed main(){
    return 0;
}

方式1:鼠标挪动到queue上面按住Ctrl键会成为一个小手,点击一下,跳转到一个为queue的文件右击这个文件,点击从上到下第6个按键,等待即可跳转到一个文件,将之前写好的priority_deque.h放入这里面即可。
方式2:点击此电脑->C盘->Program Files(x86)->Dev-Cpp->MinGW64->lib->gcc->x86_64-w64-mingw32->4.9.2->include->c++将文件拷贝到这个里面。

导入:

完成以上操作可以使用头文件,这个只针对于整型,作者均已经调成long long类型。

#include<priority_deque>

成员函数:

这个手写数据类型有大量的成员函数:
|函数名|解释| |:-:|:-:| |note_in(x)|临时存储x| |note_out(x)|打印出临时存储的变量x,若没有存储变量返回LONG_LONG_MAX| |push(x)|用于散装结构时,在首部或者尾部随机选择一个插入x| |pop()|用于散装结构时,在首部或者尾部随机选择一个删除x| |out(l,r,f)|从l开始到r结束输出所有数值,f可以随便填写| |size()|返回长度| |push_back(x)|插入一个元素在尾部| |pop_back(x)|删除一个元素在尾部| |push_front(x)|插入一个元素在头部| |pop_front(x)|删除一个元素在头部| |p_sort(f)|f只可以是0或1为排序规则| |empty()|判空,空返回1否则返回0| |front()|取出头部元素| |back()|取出尾部元素| |two_points_bool(x)|在序列中寻找x寻找成功返回1否则返回0| |two_points_int(x)|在序列中寻找x寻找成功返回下表否则返回-1| |clear()|清空|