STL 容器

\(vector\)

动态数组。

#include<vecoter>//头文件 
vector</*类型*/> /*名称*/;//定义 
vector</*类型*/>::iterator /*名称*/;//迭代器定义 
for(int i=0; i<v.size(); i++)//遍历,注意从 0 开始,到 v.size()-1 结束。 
for(it=v.begin(); it!=v.end(); it++)//迭代器遍历 

以下操作时间复杂度为 O(1):

v.push_back(/*插入的元素*/);//插入元素 
v.pop_back();//删除末尾元素
v.size();//返回数组长度
v.empty();//判断是否为空,空返回 1,否则返回 0。 
v.front();//返回首元素
v.back();//返回尾元素
v.clear();//清空 

\(set\)

有序集合,不重复,始终保持有序,默认从小到大。

#include<set>//头文件 
set</*类型*/> /*名称*/;//定义 
set</*类型*/>::iterator /*名称*/;//迭代器定义 
for(int i=0; i<s.size(); i++)//遍历,注意从 0 开始,到 v.size()-1 结束。 
for(ss=s.begin(); ss!=s.end(); ss++)//迭代器遍历  

以下操作时间复杂度为 O(\(\log\) n):

s.insert(/*插入的元素*/);//插入元素 
s.erase(/*删除的元素或迭代器指向的元素*/);//删除元素
s.size();//返回数组长度
s.find(/*查找的数*/)//判断它在集合 s 中,是返回它的迭代器,否则返回 s.end() 
s.count(/*查找的数*/);//返回它集合 s 中的个数

二分查找:

s.lower_bound(x)//查找 >= x的元素中最小的一个,返回该元素的迭代器
s.upper_bound(x)//查找 > x 的元素中最小的一个,返回该元素的迭代器

multiset:有序多重集合,内部元素是可以重复出现的,并保持有序。
操作和 \(set\) 一样。

\(map\)

\(map\) 容器是一个 键值对 \(key-value\) 的映射。算法内部实现也是关于 \(key\) 的平衡树。
默认按照 从小到大排序的,也可以重载 < 运算符来自定义 的排序方式。
\(key\) 只能是不可变类型,且不可以重复;
\(value\) 可以是任意类型,且能够重复。
申明的格式 map<key_type, value_type> names

#include<map>//头文件 
map</*类型1*/,/*类型2*/> /*名称*/;//定义 
map</*类型1*/,/*类型2*/>::iterator /*名称*/;//迭代器定义 
for(int i=0; i<mp.size(); i++)//遍历,注意从 0 开始,到 v.size()-1 结束。 
for(it=mp.begin(); it!=mp.end(); it++)//迭代器遍历 

以下操作时间复杂度为 O(1):

mp.insert(make_pair(/*键*/,/*值*/));//插入元素 
mp.erase(/*键*/);//删除以它为键的键值对
mp[/*键*/]=/*某数值*/;//修改键 
mp.find(/*查找的键值对的键*/)//判断它在集合 s 中,是返回它的迭代器,否则返回 mp.end() 
posted @ 2023-05-13 21:48  Ggsddu_zzy  阅读(30)  评论(0编辑  收藏  举报