C++常用STL
本文最后更新于:2022年9月13日 07:54
没有一次性总结完,做一道题总结一点。
string
初始化
1 |
|
方法
1 |
|
stack
初始化
1 |
|
方法
push() | 压栈,增加元素 O(1) |
---|---|
pop() | 移除栈顶元素 O(1) |
top() | 取得栈顶元素(但不删除)O(1) |
empty() | 检测栈内是否为空,空为真 O(1) |
size() | 返回stack内元素的个数 O(1) |
queue
初始化
1 |
|
方法
1 |
|
priority_queue
初始化
priority_queue<type,container,function>
其中第一个参数不可以省略,后两个参数可以省略。
type:数据类型
container:实现优先队列的底层容器,要求必须是以数组形式实现的容器
function:元素之间的比较方式
1 |
|
方法
1 |
|
priority_queue(),默认按照从小到大排列。所以top()返回的是最大值而不是最小值!使用greater<>后,数据从大到小排列,top()返回的就是最小值而不是最大值!如果使用了第三个参数,那第二个参数不能省,用作保存数据的容器!
vector
初始化
1 |
|
方法
1 |
|
经典题目
unordered_map
方法
成员方法 | 功能 |
---|---|
begin() | 返回指向容器中第一个键值对的正向迭代器。 |
end() | 返回指向容器中最后一个键值对之后位置的正向迭代器。 |
empty() | 若容器为空,则返回 true;否则 false。 |
size() | 返回当前容器中存有键值对的个数。 |
max_size() | 返回容器所能容纳键值对的最大个数,不同的操作系统,其返回值亦不相同。 |
at(key) | 返回容器中存储的键 key 对应的值,如果 key 不存在,则会抛出 out_of_range 异常。 |
find(key) | 查找以 key 为键的键值对,如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果 end() 方法返回的迭代器)。 |
count(key) | 在容器中查找以 key 键的键值对的个数。 |
insert() | 向容器中添加新键值对。 |
erase() | 删除指定键值对。 |
clear() | 清空容器,即删除容器中存储的所有键值对。 |
swap() | 交换 2 个 unordered_map 容器存储的键值对,前提是必须保证这 2 个容器的类型完全相等。 |
经典题目
map
unordered_set
介绍
无序集(unorder sets)是一种不按特定顺序存储唯一元素的容器,允许根据元素的值快速检索单个元素。
在unordered_set中,元素的值同时也是唯一标识它的键。键是不可变的,因此,unordered_set中的元素在容器中不能被修改,但是它们可以被插入和删除。
在内部,unordered_set中的元素并不按照任何特定的顺序排序,而是根据它们的散列值组织到桶中,从而允许根据它们的值直接快速访问单个元素(平均时间复杂度为常数)。
与set容器相比,Unordered_set容器通过键访问单个元素的速度更快,尽管它们通常在通过元素的子集进行范围迭代时效率较低。
- 容器的属性
- 关联性:关联容器中的元素是通过它们的键引用的,而不是通过它们在容器中的绝对位置引用的
- 无序性:无序容器使用哈希表组织元素,允许通过键快速访问元素。
- 具有set特性:元素的值也是用来标识它的键。即value就是key。
- 独一无二的key:容器中没有两个元素具有相同的键。
- Allocator-aware:容器使用一个allocator对象来动态地处理其存储需求。即当你插入或者删除数据时,容器会自动处理空间。
初始化
1 |
|
方法
成员函数 | 功能 |
---|---|
insert | 插入指定元素 |
erase | 删除指定元素(删除了所有值为x的元素)(或者需要传入multiset <T>::iterator pos 删除当前pos的那一个元素,也就是map.erase(map.find(x)) ) |
find | 查找指定元素 |
size | 获取容器中元素的个数 |
empty | 判断容器是否为空 |
clear | 清空容器 |
swap | 交换两个容器中的数据 |
count | 获取容器中指定元素值的元素个数 |
begin | 获取容器中第一个元素的正向迭代器 |
end | 获取容器中最后一个元素下一个位置的正向迭代器 |
经典题目
unordered_multiset
介绍
unordered_multiset 是关联容器,含有可能非唯一 Key 类型对象的集合。搜索、插入和移除拥有平均常数时间复杂度。
元素在内部并不以任何顺序排序,只是被组织到桶中。元素被放入哪个桶完全依赖其值的哈希。这允许快速访问单独的元素,因为一旦计算哈希,它就指代放置该元素的准确的桶。
注:
unordered_multiset 与 unordered_set 的最大区别就是前者可以容纳多个相同的值,后者容器中的元素具有唯一性,相同点是两者都是无序的。
unordered_multiset 与set的最大区别是前者可以容纳多个相同的值并且容器内部无序,后者容器中的元素具有唯一性并且容器内部有序。
方法
成员函数 | 功能 |
---|---|
empty | 检查容器是否为空 (公开成员函数) |
size | 返回容纳的元素数 (公开成员函数) |
max_size | 返回可容纳的最大元素数 (公开成员函数) |
begin、cbegin | 返回指向容器第一个元素的迭代器 (公开成员函数) |
end、cend | 返回指向容器尾端的迭代器 (公开成员函数) |
clear | 清除内容 (公开成员函数) |
insert | 插入元素或结点 (C++17 起) (公开成员函数) |
erase | 删除指定元素(删除了所有值为x的元素)(或者需要传入multiset <T>::iterator pos 删除当前pos的那一个元素,也就是map.erase(map.find(x)) ) |
swap | 交换内容 (公开成员函数) |
count | 返回匹配特定键的元素数量 (公开成员函数) |
find | 寻找带有特定键的元素 (公开成员函数) |