STL
m a p map map
map<int,int> mp;
第一个是下标类型,第二个是值
map的应用十分广泛,但是缺点就是复杂度太高,是logn的,所以在使用的时候一定要计算复杂度。
另外,如果用了结构体当下标,那么一定要重载运算符!!
想标记一个整体的时候就可以用
m
a
p
map
map也有指针,调用这个指针是一个
p
a
i
r
pair
pair的类型,
f
i
s
r
t
fisrt
fisrt返回下标,
s
e
c
o
n
d
second
second返回值
经典例题:
碰撞检测
s e t 与 m u l t i s e t set与multiset set与multiset
区分:前者去重,后者不去重,都是按从小到大排序的
这玩意可以直接
l
o
w
e
r
_
b
o
u
n
d
lower\_bound
lower_bound的,,也支持指定位置/元素的删除,对于需要排序的东西,觉得比优先队列强,貌似堆能干的它都能,还有个指示器【滑稽】
特别注意,他的
l
o
w
e
r
_
b
o
u
n
d
lower\_bound
lower_bound长这样
s.lower_bound(x)
如果想把一个set中的元素弄到另一个里,可以这样写
s2.insert(s1.begin(),s1.end());
经典例题:
D
e
l
e
g
a
t
i
o
n
Delegation
Delegation(一道挺考验思维的题,但是是基于贪心基础上,算是用
m
u
l
t
i
s
e
t
multiset
multiset优化了一下吧)
辣椒(
s
e
t
set
set+贪心的经典应用,找最接近
x
x
x的数,要想到
s
e
t
set
set)
v e c t o r vector vector
其实本质上它就是一个数组,但是你用了它就能和很多数据结构结合,完成奇妙的操作
特别注意,在用他排序的时候,一定要写成
bool cmp2(const vector<int> &x,const vector<int> &y)
这个样子
不然会T!!!!!!
经典例题:
最短路(在队列里面套了vector,维护的是具有同一性质的东西)
b i t s e t bitset bitset
bitset<100> z(s);
可以直接把字符串变成bitset,1011变成000···1011,用的时候直接调用z即可
本文总结了STL中map、set/multiset、vector和bitset的使用技巧和经典应用场景。map作为下标-值对的数据结构,适用于广泛的场景但要注意其高复杂度。set与multiset区别在于去重,可用于排序和高效查找。vector本质是动态数组,常与其他数据结构结合使用,排序时需要注意语法。bitset便于将字符串转换并进行操作。文章通过实例展示了STL在解决碰撞检测、最短路等算法问题中的应用。
1494

被折叠的 条评论
为什么被折叠?



