STL
仅自用,感谢zzuacm
一.string(字符串)


例题 https://pintia.cn/problem-sets/994805046380707840/problems/11119145994086645
int main()
{
string str;
getline(cin,str);
for(int i=0;i<str.length();i++)
{
if(str[i]=='6')
{
int j=1;//j代表连续6的个数
while(i+j<str.length()&&str[i+j]=='6')j++;
if(j>9)str.replace(i,j,"27");
else if(j>3)str.replace(i,j,"9");
}
}
cout<<str<<endl;
return 0;
}
二.vector(动态数组)




三.itractor(迭代器)

四.queue(队列)
只能从尾部加从头部移除

五.priority_queue(优先队列)
priority_queue中出队顺序与插⼊顺序⽆关,与数据优先级有关,本质是一个堆


priority_queue中存的元素如果是结构体这样无法进行比较的类型,必须要重载运算符<,相当于先使得优先队列中的元素可以进行比较再建立pq,否则直接建优先队列是会报错的

例题 https://www.luogu.com.cn/problem/P3378
#include<bits/stdc++.h>
using namespace std;
int main(){
priority_queue<int, vector<int>, greater<int> > pq;
int n, x, y;
cin>>n;
while(n--){
cin>>x;
if(x==1){
cin>>y;
pq.push(y);
}else if(x==2){
cout<<pq.top()<<endl;
}else{
pq.pop();
}
}
return 0;
}
六.set(集合)
集合(set)是一种包含对象的容器,可以快速地(logn)查询元素是否在已知几集合中。 set 中所有元素是有序地,且只能出现⼀次,因为 set 中元素是有序的,所以存储的元素必须已经定义 过「<」运算符(因此如果想在 set 中存放 struct 的话必须⼿动重载「<」运算符,和优先队列一样) 与set类似的还有 multiset元素有序可以出现多次 unordered_set元素无序只能出现一次 unordered_multiset元素无序可以出现多次、


七.map(映射)
map 是照特定顺序存储由 key 和 value 的组合形成的元素的容器, map 中元素按照 key 进⾏排序,每个 key 都是唯⼀的,并对应着一个value,value可以重复 map的底层实现原理与set一样都是红黑树 与map类似的还有unordered_map,区别在于key不是按照顺序排序


八.bitset(二进制有序集)
bitset是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。


九.常用函数

十.sort(快排)


十一.unique(去重函数)
unique(first, last): [first, last)范围内的值必须是一开始就提前排好序的
移除 [first, last) 内连续重复项
去重之后的返回最后一个元素的下一个地址(迭代器)

十二.lower_bound/upper_bound(二分函数)

十三.next_permutation


浙公网安备 33010602011771号