不管是在CSP还是在NOI的考场上,STL都是一个非常好使的东西(deque受害者别喷我QWQ)。
所以熟练掌握STL的使用能让你在考场上轻松很多。
基础
queue stack priority_queue
这几个属于非常基础的东西了。
他们分别是队列。栈和堆(注意是大根堆)。
大根堆转成小根堆可以这么写:
priority_queue<int,vector<int>,greater<int> > q;
当然,你也可以用他们维护自定义变量,但是要把自定义变量先重载运算符。
他们的装入和弹出操作都是 push
和 pop
。
使用方法:q.push(x)
和 q.pop()
。
调用首元素的方法不一样:
队列: q.front()
。
栈: s.top()
。
堆: q.top()
。
还有一些我感觉没啥用的东西例如:list heap
(链表,堆)。
感兴趣可以自己学一下。
string
是个神奇的东西,这个东西里封装了很多有用的函数。
substr
作用:把字符串的一部分截取出来并返回这个字符串。
两种使用方法:
(1)s.substr(i)
指从位置 \(i\) 开始截取到字符串的最后一个字符。
(2)s.substr(i,j)
指从位置 \(i\) 开始,截取 \(j\) 个字符。
find
作用:在文本串中寻早是否存在一个模式串,如果有,返回下标,否则返回 \(-1\)。
使用方法:
s.find(t)
s和t都是字符串。
delete
把两个字符串拼接起来:
string x,y;
cin>>x>>y;
string t=x+y;
这样就把y拼在了x后面。
中级
map vector set
map
又名映射,顾名思义,就是A映射B,这个A可以是string,可以是int,可以是long long,但这个东西需要有优先级,B随便,只要不是数组啥都行,甚至可以是另一个map。
map
的实现是用红黑树实现的,他封装好了,所以所有操作都是log次的
定义方法:
map<int,int>
使用方法:
1.映射
map[x]++
指将 \(x\) 所映射的变量 \(+1\)。
set
就是集合,当然,是不可重集。这东西就是平衡树,可是比手写的平衡树少了些东西(维护的东西是需要有优先级的)。
定义方法:
set<int>
insert
操作
就是往集合里插入一个元素。
使用方法:
set<int,int> st;
int x;
cin>>x;
st.insert(x);
将 \(x\) 插入集合st中。
erase
就是把 \(x\) 从集合中删除,并返回删掉了多少个元素。
st.erase(x);
将 \(x\) 从集合中删除。
当然也可以删除迭代器
标签:map,set,string,STL,st,标准,字符串,使用指南 From: https://www.cnblogs.com/Y2y7m/p/16910065.html