一些冷门但好用的STL容器

438 字
2 分钟
一些冷门但好用的STL容器

STL-multiset#

用法:

#include <set>
/*---*/
multiset<typename _Kty, typename _Pr = less<_Kty >,typename _Alloc = allocator <_Kty > >

用处:优先队列(但可以访问指定下标元素)

priority_queue的对比:

功能priority_queuemultiset
优先支持支持
插入/删除复杂度O(n log(n))O(n log(n))
访问指定下标不支持支持
插入/添加新值.push().insert()
删除指定元素不知道支不支持.erase(下标))
删除指定值不知道支不支持.erase(值)删除所有同值元素
剩下的不知道

优先:默认较小值优先,可使用multiset<int, greater<int>>较大值优先

遍历:指针遍历,用法如下:

for (auto it = multiset.begin(); it != multiset.end(); ++it)
*it

for(auto it : multiset)
it

访问(i为要访问的下标):

*next(multiset.begin(), i);

补充:multiset内置lower_boundupper_bound,且multiset无需排序,所以:

vector<int> a;
/*input*/
sort(a.begin(), a.end());
auto lbn = lower_bound(a.begin(), a.end(), n);

等价于

multiset<int> a;
/*input*/
auto lbn = a.lower_bound(5);

STL-tuple#

使用:

#include<tuple>
/*---*/
tuple<typename ..._Types>

简述:相当于能包含多个多种类型(包括STL)的pair

支持字典序排序(也就是可以像pair一样塞到priority_queue里

实例:

priority_queue < tuple<int, string, vector<int, int> > >

访问:

get<i> tuple
//i指下标(tuple的第i项),tuple指定义了tuple类型的名字

STL-iota#

手动for循环初始化是一种很不健康的行为(?主要还是不好看

在初始化并查集fa数组时很好用

以递增的顺序将指定区间赋值,例:

iota(vector.begin(), vector.end(), 0);

此时vector中每一项的值等于其下标


至于set,map,unordered_map,unordered_set,sort,vector,string等STL基础容器相信大家已经了如指掌了,这里不再赘述

如果你连上面这几个容器都不会建议重新从红题开刷

其他的一些我觉得没啥用或者过于冷门就没列出来了

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
一些冷门但好用的STL容器
https://azx.xn--0iv.gay/posts/somecoldstl/
作者
WanFoxAZX
发布于
2026-08-24
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
WanFoxAZX
Hello, I'm AZX.
公告
Welcome!
分类
标签
最新动态

还没有发布动态

更多动态
站点统计
文章
10
动态
0
分类
6
标签
5
总字数
2,549
运行时长
0
最后活动
0 天前
站点信息
构建平台
Netlify CI
博客版本
Firefly v6.15.5
文章许可
CC BY-NC-SA 4.0