目录
优先队列(priority_queue)
性质:
常用函数:
动态数组(vector)
性质:
常用函数:
哈希表(map,unordered_map)
性质:
常用函数:
集合(set,unordered_set)
性质:
常用函数:
双端队列(deque)
性质:
常用函数:
总结stl容器常用的函数
优先队列(priority_queue)
性质:
自动排序,默认为大根堆
常用函数:
#include<bits/stdc++.h>
using namespce std;
struct cmp1{// 变为小根堆bool operator()(int a,int b){// b为堆顶元素return b<a;}
};
int main(){priority_queue<T,vector<T>,compare> pq;//增// 1.插入元素并对底层容器进行排序pq.push(value);// 2.原地构造元素并对底层容器进行排序(对构造vector元素可能会出错)pq.emplace(value);//删,删除顶部元素pq.pop();//查// 1.返回顶部元素pq.top();// 2.检查优先队列是否为空,为空返回1否则为0pq.empty();// 3.返回优先队列内元素的数量pq.size();// 小根堆peiority_queue<int,vector<int>,greater<int>> pq1;// 自定义 cmp 函数 - 小根堆peiority_queue<int,vector<int>,greater<int>> pq1;
}
动态数组(vector)
性质:
可以改变容器的大小,对于int不定义默认为0。
常用函数:
#include<bits/stdc++.h>
using namespace std;
// 降序
bool cmp(int a,int b){return a>b;
}
int main(){// value:默认值,不填则为0vector<T> v(vector_size,value);// 增// 1.将给定的元素到容器的末尾v.push_back(value);// 2.将构造元素附加到容器末尾v.emplace_bcak(value);// 3.插入元素,pos:使用迭代器v.insert(pos,value);// 删// 1.删除最后一个元素v.pop_back();// 2.清空数据v.clear();// 改// 1.交换vector内部的两个元素swap(v[0],v[4]);// 2.排序,默认为升序sort(v.begin(),v.end(),less<int>());// 排序为降序sort(v.begin(),v.end(),cmp);// 3.去重// unique 返回去重之后的尾地址,判断当前元素是否等于上一个元素,将不重复的元素移到前面来sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());// 查 // 1.返回元素数量v.size();// 2.检查容器是否为空,为空返回1,否则为0v.empty();// 3.返回数组中第一个大于等于该元素的下标int ind = lower_bound(v.begin(),v.end(),num)-v.begin();// 4.返回数组中第一个大于该元素的下标int ind = upper_bound(v.begin(),v.end(),num)-v.begin();
}
哈希表(map,unordered_map)
性质:
使用键值对存储。默认为升序。
map:自动排序,key唯一
unordered_map:无序,key唯一,查询速度快于map
两者可使用函数相同。
常用函数:
#include<bits/stdc++.h>
using namespace std;
// 按key递增排序
struct cmp { bool operator()(int a, int b) const { return a < b; }
};
int main(){map<key,T,cmp> mp;// 增 mp[key1] = value2;// 删// 1.删除所有元素mp.clear();// 2.删除对应的键mp.erase(key1);// 改//查// 1.查找指定键,返回迭代器auto ind = mp.find(key1);// 2.返回键的数量mp.size();}
集合(set,unordered_set)
性质:
set:有序,元素唯一
unordered_set:无序,元素唯一
两者所用函数相同。默认为升序。
常用函数:
#include<bits/stdc++.h>
using namespace std;
// 按key降序
struct cmp{bool operator()(int a,int b) const{return a > b;}};
int main(){set<key,cmp> s;// 增// 1.插入元素 s.insert(value);// 2.就地构造元素s.emplace(value);// 删// 1.删除元素s.erase(value);// 2.清空元素s.clear();// 改// 查// 1.查找具有特定键的元素,返回迭代器s.find(value);// 2.返回元素数量s.size();// 3.返回大于等于value的迭代器s.lower_bound(value);// 4.返回大于value的迭代器s.upper_bound(value);
}
双端队列(deque)
性质:
双向开口,可在首尾进行删改操作。可用下标索引与数组一样。
常用函数:
deque<int> a: 创建内部元素为整型的双端队列a。q.front():返回第一个元素的引用。q.back():返回最后一个元素的引用。q.push_front(x):把元素x插入到双向队列的头部。q.pop_front():弹出双向队列的第一个元素。q.push_back(x):把元素x插入到双向队列的尾部。q.pop_back():弹出双向队列的最后一个元素。q.begin(): 返回指向容器中第一个元素的迭代器。q.end(): 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。q.size(): 返回实际元素个数。
常用stl函数:
移动迭代器:
next(iterator,n):
返回返回传入迭代器“iterator”右边n个单位,默认为1。prex(iterator,n)
返回返回传入迭代器“iterator”左边n个单位,默认为1。
全排列:
next_permutation:将当前排列更改为 全排列中的下一个排列。
如果当前排列已经是 全排列中的最后一个排列(元素完全从大到小排列),
函数返回 false 并将排列更改为 全排列中的第一个排列(元素完全从小到大排列);
否则,函数返回 true。
next_permutation(v.begin(), v.end()) 或 next_permutation(v + begin, v + end)。prev_permutation:将当前排列更改为 全排列中的上一个排列。