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

posted @ 2021-02-10 19:04  Zoey的小窝  阅读(64)  评论(0)    收藏  举报