STL黑科技

vector

相当于动态一维数组,常用的添加、删除、清空等

头文件:< vector >

定义方法:vector < 类型> 变量名

例如:vector< int> V; 相当于定义了一个动态的一维数组V,数组单元是int类型

常见函数及功能

v.size()  :返回v的元素个数

 v[i]:返回索引i所标识的元素,和数组用法几乎完全相同。对i不进行越界检查。

 v.push_back(e):在尾部添加一个元素e的副本。

v.pop_back():移除最后一个元素但不返回最后一个元素。

v.erase(begin, end):删除区间$[begin, end)$内所有元素,返回下一个元素的位置。

v.clear():移除所有元素,清空容器。

注意,erase操作涉及大量元素的移动,可能会严重影响效率。

 总结一下,就是你要加多少

deque(双端队列)

   d[i]:返回d中下标为i的元素的引用。

   d.front():返回第一个元素的引用。

   d.back():返回最后一个元素的引用。

   d.pop_back():删除尾部的元素。该函数没有返回值。

   d.pop_front():删除头部的元素。该函数没有返回值。

   d.push_back(e):在尾部添加一个元素e的副本。

   d.push_front(e):在头部添加一个元素e的副本。

多用于单调队列

比如说NOIP2017普及组T4 , 可以优化dp

stack

s.push(a):使a入栈。

s.push(a):使a入栈。

s.pop():元素出栈。该函数没有返回值。

s.size():返回堆栈中元素个数。

s.empty():判断堆栈是否为空栈。

单调栈可以用来求它左边第一个大于它的数,优化dp

priority_queue

最小值优先出队:priority_queue< int,vector< int>,greater< int> > q;

最大值优先出队:priority_queue< int,vector< int>,less< int> > q;

一定要空一格 int> >q; 

q.push(a):使a入队。

q.top():返回优先级最高的元素,但不会移除元素。

q.pop():移除优先级最高的元素。该函数没有返回值。

q.empty():判断队列是否为空。

q.size():返回队列中已有元素的个数。

map

map<string,int> mp;//建立名字叫mp,存储string,编号int

mp.clear(); //清空
mp.conut(x); 查询x的个数

map<string,int>::iterator it; //定义map容器的指针it

It=mp,begin();it=mp.end();//同上

if(mp[nm[i]]==0) mp[nm[i]]=index++; 
        //判断是否已经出现过,没出现过,就编号 

for(it=mp.begin(); it!=mp.end(); it++){
        cout<<it->first<<" "<<it->second<<endl; 

这个来玩hash跑得飞快

#define ULL unsign long long
map<ULL,int> Map

 而且不用取模

将字符串的值转成ULL类型存就好了

    int len=strlen(ch+1); ULL sum=0;
    for(int i=1;i<=len;i++) sum=sum*31+ch[i];
    if(!Map[sum]) ans++,Map[sum]++;

Pair

dijkstra 时 ----

priority_queue<pair<int,int> > q;
q.push(make_pair(距离,编号));

猜你喜欢

转载自blog.csdn.net/sslz_fsy/article/details/81303541