STL容器主要用于数据的 增删改查,不同的STL容器用于不同的场景
数据结构的存储主要分为
1、数组 随机访问,首次存储空间固定,扩容需要再复制数据
2、链表 不能随机访问,不存在扩容问题
vector
// 初始化
vector<int> vec2(vec1.begin(), vec1.end()) // 以vec1初始化vec2,左闭右开(vec1.end不包含)
// 查找元素
begin(): 首元素
rbegin(): 尾元素
// 索引查找:查找元素3的索引
// find函数需要包含头文件
#include "algorithm"
auto it = find(vec.begin(), vec.end(), 3);
int index= it - vec.begin();
// 索引查找:查找大于元素3的索引
auto index = uppper_bound(vec.begin(), vec.end(), 3);
// 索引查找:查找大于等于元素3的索引
auto index = lower_bound(vec.begin(), vec.end(), 3);
// 排序后去重
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());
// 最大值最小值获取
int maxValue = *max_element(vec.begin(),vec.end());
int minValue = *min_element(vec.begin(),vec.end());
queue:队列
deque:双端队列
set
有序且唯一
set<int> s;
首元素获取:s.begin()
主要方法:
insert
erase
map
有序,能以
pair
为key
map<pair<int, int>, int> mp;
unordered_map
无序(查找效率比map高),不能以
pair
为key :unordered_map<pair<int, int>, int> mp;
count: 不会增加key,value
find: 会增加key,value
删除元素:只需要erase其中的key
// 查找key是否存在
unordered_map<int,int> mp;
mp.count(1) // 返回1表示存在,返回0表示不存在
mp.find(1) == mp.end()
优先级队列 - priority_queue
头文件:#include<queue>
最大堆(默认)
priority_queue<int, vector<int>, less<int> > maxHeap;
最小堆
priority_queue<int, vector<int>, greater<int> > minHeap;
priority_queue<ListNode*, vector<ListNode*>, function<bool(ListNode*, ListNode*)>> pq(
[] (ListNode* a, ListNode* b) { return a->val > b->val; });
// 自定义排序
// 方式1
auto cmp = [](int a, int b) { return a > b; };
priority_queue<int, vector<int>, decltype(cmp)> pq(cmp);
// 方式2
struct cmp{
bool operator() ( Node a, Node b ){//默认是less函数
//返回true时,a的优先级低于b的优先级(a排在b的后面)
if( a.x== b.x ) return a.y> b.y;
return a.x> b.x; }
};
priority_queue<Node, vector<Node>, cmp> q;
方法:
heap.push()
heap.pop()
heap.top()