WKC的STL——priority_deque系统解说
Charles_with_wkc · · 个人记录
前言:
这个安装完成后这可以在自己的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()|清空|