STL容器


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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值