.....STL是c++里很强势很好用的一系列容器(函数)之类的,之前一直不太会用,所以总是暴毙。。。。想着快比赛了,是时候理一下这些东西了。
-1、pair
存放两个基本元素的东西
0、重载运算符(对于结构体的重载)
struct node { int a; 返回类型 operator 符号 (const node 随便一个名称)const { 操作,一个是另外一个结构体(传进来的),一个是内部元素 } };
譬如+:
返回两个元素的和
#include<bits/stdc++.h> using namespace std; struct node { int a,b; node operator + (const node x)const { return a+x.a; } }; int main() { node x={1,2}; node y={2,3}; int c=x+y; printf("%d",c); return 0; }
1、queue(队列)(头文件:queue)(多用于广搜)
第一个当然是队列了。
定义方法:
queue <类型> 名称
其中类型可以是各种各样的东西,包括结构体,pair,等。
使用方法:以下队列名称全部用q
q.push(a);//向队列的尾部塞一个元素a q.pop();//弹掉队列的元素 q.front()//返回队头元素的值 q.size()//返回队列长度(元素个数) q.emoty()//判断队列是否为空
2、deque(双端队列)(头文件:deque(这玩意还要一个头文件....))(多用于SPFA之SLF优化)
定义方法:
deque <类型> 名称
同上,类型也很多。
使用方法:(名称为q)
q.push_back(a);//向队尾塞一个元素a q.push_front(a);//向队头塞一个元素a q.pop_back();//删除队尾元素 q.pop_front();//删除队头元素 q.front()//返回队尾元素 q.back()//返回队头元素 q.empty()//判断队列是否为空,若空则返回1,否则0 q.size()//返回队列长度 q.clear()//清空队列
3、priority_queue(优先队列,堆)(头文件:queue)
c++STL强大的首体验
用于维护一个序列的大小,可以理解为自动排序,本质是一个二叉堆,内部严格遵守堆顶优先级最大(也就是值最小,在大根堆里)
定义方法:
priority_queue < 类型 > 名称
注意:这样貌似只能定义一个大根堆(把优先级靠后,也就是大的值往后排),node要重载运算符||cmp(好吧还是重载运算符),pair的话自动用第一个元素的值排序
更广泛的写法(更好用,也就是自己定义优先级)
struct cmp { bool operator()(int a,int b) { return a<b;//想干的事 } }; priority_queue < int , vector < int > , cmp > q ;
谈谈基本操作:
q.push(a);//塞a q.pop();//弹队头,也就是堆顶 q.top();//返回堆顶值 q.empty()//同上 q.size()//队列长度