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(距离,编号));